我的c++学习(9)指针
◆ 1、指针变量的赋值、初始化与简单应用
int x=,y;
y=; // y可以理解成该存储单元的当前名字
int *ip; // ip是一个指针(变量)
ip=&y; // ip是存储空间y的地址 cout<<*ip<<'\n'; //结果15
cout<<ip<<'\n'; //结果001BFC0C
cout<<&y<<'\n'; //结果001BFC0C
cout<<y<<'\n';; //结果15
cout<<x; //结果5
//int age1=18, age2=20, *p_age;
// p_age=&age1;
// cout<<"age of wang ping is"<<*p_age<<endl; //18
// p_age=&age2;
// cout<<"age of zhang ling is"<<*p_age<<endl; //
◆ 2、指针变量初始化
例如: int age , *p_age=&age; //p_age初始化为指向整型量age。
任何类型指针都可以赋以0值(NULL),称空指针,表示该指针不指向该类型的任何一个变量(对象)。注意不是指向地址为0的内存空间。
常量是不可寻址的,但常变量是可寻址的,如:
p_age=&20; //错误
const float PI=3.14159;
float *pointer=&PI; //正确
◆ 3、指针使用时注意 •指针类型可以强制转换,有特殊应用,例如:
int m, *pm=&m;
char *p1=(char*)&m, *p2=(char*)pm;
用pm读的是整型数,用p1,p2读的是整型数的第一个字节。
•同类型的指针可以相互赋值,如有说明:
int val1=18, val2=20, *p_val1=&val1, *p_val2=&val2;
// p_val1指向val1,p_val2指向val2
执行 p_val1=p_val2; 后,则p_val1也指向val2,而没有指针指向val1了。(查看动画演示)
•必须谨慎使用指针,一旦使用不当会产生灾难性的后果。
例如,局部指针变量在定义时其中的值为随机数,即指针指向了一个无意义的地址,也可能偶然指向了一个非常重要数据的地址。如果对所指的内存进行不当操作,其中的数据就丢失了。
再如,全局指针变量,原指向一个局部变量,后来该内存又重新分配了,我们再对该指针所指地址进行操作,同样会发生不可预知的错误。
•对指针变量决不可以任意赋一个内存地址,结果甚至是灾难性的。如:
int *P=(int *)0xaf80;
把指针变量P的初始置为0xaf80,我们并不知道那个内存单元放的是什么数据,这在一般程序中是非常危险的。
• 如果通过指向对象或结构变量的指针变量来访问其公有成员时,则只要在指针变量名后加箭头号(箭头操作符“->”),再加公有成员名就可以了。
#include "stdafx.h"
using namespace std;
#include<iostream>
#include<cstring>
using namespace std; struct student{
char name[];
char id[];//学号最好用字符串,当学号以0开头,整数会丢失0甚至认为是八进制
int age;
float score;
char address[];
};
int main(){
student st1,*prst;
prst=&st1;
cout<<"请输入学生的姓名:"<<endl;
cin.getline(st1.name,);//cin.getline可输入空格
cout<<"请输入学号、年龄和入学成绩:"<<endl;
cin>>st1.id>>st1.age>>st1.score;
cin.get();//吸收掉换行回车符
cout<<"请输入家庭住址:"<<endl;
cin.getline(st1.address,);
cout<<"姓名"<<'\t'<<prst->name<<'\n';
cout<<"学号"<<'\t'<<prst->id<<'\n';
cout<<"年龄"<<'\t'<<prst->age<<'\n';
cout<<"入学成绩"<<'\t'<<prst->score<<'\n';
cout<<"家庭住址"<<'\t'<<prst->address<<endl;
return ;
}
指针常量是固定指向一个对象的指针,即指针本身是常量:
char ch=’a’,ch1=’x’;
char * const ptr=&ch; //注意const放在类型说明之后,变量名之前
*ptr=’b’;//正确
ptr=&ch1;//错误
ptr本身在初始化时所指向的地址是不可改变的,但它指向的目标ch的值是可以改变的。
•常量指针是指向“常量”的指针,即指针本身可以改指向别的对象,但不能通过该指针修改对象。该对象可以通过其他方式修改,常用于函数的参数,以免误改了实参。类似于在“运算符重载”一节中引用参数前加const。
char ch=’a’,ch1=’x’;
const char * ptr1=&ch; //ptr1是常量指针
*ptr1=’b’; //错误,只能做ch=’b’
ptr1=&ch1; //正确
我的c++学习(9)指针的更多相关文章
- (转) 学习C++ -> 指针初步
学习C++ -> 指针初步 一.指针 1. 什么是指针? 我们知道, 计算机的内存是由一个个独立的存储单元组成, 并且系统会对每一个存储单元分配一个唯一的号码, 称为这个存储 ...
- C++学习之指针的常见错误
C++学习之指针的常见错误 我们在编程的过程中,有时候在使用指针的时候,删除一个指针以后一定要将这个指针设置为空指针,这是因为删除这个指针只是删除这个指针指向的地址,这个指针还真是的存在程 ...
- c语言学习笔记 - 指针和字符串
前面学习了字符串是一种字符数组,又知道了指针变量和数组的关系,这里来看一下指针和字符串的关系. #include <stdio.h> int main(void){ char str = ...
- 【C++】初次学习C++指针时的一些易混或疑惑的地方
C++中的指针是一个比较复杂的知识概念,最近我有在学习这一方面的知识,就借此文章记录一下在学习时容易产生的混淆.本人初次发技术类的分享,可能会有纰漏,欢迎诸位指正^_^! 1.*在两种语境下的含义 先 ...
- 我的c++学习(12)指针作为函数参数
◆ 引用调用与指针传值调用C++中函数的参数的基本使用方法是传值.为了弥补单纯传值的不足,以引用作为函数的参数,从逻辑上讲引用是别名,在函数中对参数的操作,就是对实参的操作,而在物理上是传实参的地址. ...
- C++学习笔记 指针与引用
指针与引用 1. 指针 (1) 指针是一个变量(实体),存储的是一个地址,指向内存的一个存储单元,指针可以为空 (2) 指针可以为空,在声明定义时可以不初始化 (3) 指针在初始化之后可以重新指向其 ...
- C/C++学习笔记----指针的理解
指针是C/C++编程中的重要概念之一,也是最容易产生困惑并导致程序出错的问题之一.利用指针编程可以表示各种数据结构,通过指针可使用主调函数和被调函数之间共享变量或数据结构,便于实现双向数据通讯:指针能 ...
- golang学习之指针、内存分配
func pointer_test() { //空指针,输出为nil var p *int fmt.Printf("p: %v\n", p) //指向局部变量,变量值初始为0 va ...
- C学习之指针强化
char *p = (char *)malloc(100); malloc是用于分配内存的函数,它的参数为int型,表示分配多少个字节长度,其返回类型为void*,在这里用char*就是强制转化,指定 ...
随机推荐
- usr/include/dispatch - dispatch_source
博文一部分摘自:Parse分析,以下简称博文1(LeanCloud工程师针对Parse使用GCD的分析) 博文一部分摘自:GCD入门,以下简称博文2 建议先了解一下:BSD基础知识 在Dispatch ...
- PHP 流程管理
添加新流程页面: <div> 请选择流程节点:<br /><br /> <?php session_start(); include("../DBD ...
- Angular.js内置的63个指令
- centos 下测试网速
wget https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py chmod a+rx speedtest. ...
- Mongo DB 2.6 需要知道的一些自身限定
在现实的世界中,任何事情都有两面性,在程序的世界中,亦然! 我们不论是在使用一门新的语言,还是一门新的技术,在了解它有多么的让人兴奋,让人轻松,多么的优秀之余,还是很有必要了解一些他的局限性,方便你在 ...
- solr-web界面增加登录认证
目录 配置tomcat-user.xml 配置web.xml 界面展示 回到顶部 配置tomcat-user.xml 找到 tomcat 下 conf 文件下增加 tomcat-user.xml &l ...
- 问题--feed列表有新闻重复的问题
1. 经常有运营反应,客户端展示的feed列表有重复的问题. 重复问题分为两种,一种是两条新闻标题类似,另一种是两条新闻标题是完全相同. (1)标题类似 原来过滤的逻辑,是两个标题完全相等,才认为两条 ...
- H5案例分享:html5移动开发细微之美
html5移动开发细微之美 1.H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 <meta name="viewport" content="width=dev ...
- phpcookie类
1.需求 写一个cookie类 2.例子 <?php class cookie{ private $COOKIE_PREFIX = ""; private $COOKIE_E ...
- phpstorm的使用教程
1.设置行号:file->settings->Editor->Appearance->Show line numbers 2.设置字体和背景 :file->setting ...