指针:
指针:指针是一个其值为地址的变量,本质是一个地址。(就是一个存储地址的变量)
声明:指向地址的数据类型 * 指针变量名;(创建的指针可以初始化也可以不初始化)
(只要是出现了星号,而不管中间是不是有空格,我们便认为,这算是创建了一个指针变量. 如:int* a; int * n; int *b;均为指针)
解除:对于一个指针变量p,*p表示解除引用,将其应用于指针,可以得到该地址存储的值。且这个值就是常规的值。
比如:
int a = 12;
int *p;
p = &a;
cout<<"普通int类型:"<<a<<endl; //普通int类型:12
cout<<"指针类型:"<<p<<endl; //指针类型:005DFBE8
cout<<"解除指针类型(接触后为普通int类型):"<<*p<<endl; //解除指针类型(接触后为普通int类型):12
1、指针的类型:
从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各个指针的类型:
如:int *p; //指针的类型是int *
2、指针所指向的类型:
从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。
如:int *p; //指针所指向的类型是int
3、指针的值
指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。
指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为sizeof(指针所指向的类型)的一片内存区。
我们说一个指针的值是XX,就相当于说该指针指向了以XX为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。
4、指针本身所占据的内存区
指针本身占了多大的内存可用函数sizeof(指针的类型)得到。在32位平台里,指针本身占据了4个字节的长度。
int a = 12;
int *p;
p = &a;
cout<<sizeof(&a)<<endl; //4
char b;
cout<<sizeof(&b)<<endl; //4
&(取址运算符)和*(间接访问运算符/解引用指针)
&运算符:当它后面跟一个变量名的时候,给出这个变量名的地址.
int a = 12;
int *p;
p = &a;
cout<<&a<<endl; //00D4FAAC
printf("%p\n", p); // //00D4FAAC 指针%p
*运算符:后面跟一个指针的时候,得到指针指向的内存中的内容.
int a = 12;
int *p;
p = &a;
cout<<&a<<endl; //00D4FAAC
cout << *&a << endl; //12
printf("%d\n", *p); //12
参考:
网友评论