指针的理解

1 指针概念

指针是“指向”另外一种类型的符合类型。指针可以实现对对象的间接访问。

定义指针的方法,如将声明写成*d,d是变量名。
int *p1,*p2;//p1与p2都是指向int型对象的指针
double *p3;//p3指向double型对象的指针

获取对象的地址
指针存放某个对象的地址,要想获取地址,需要使用取地址符&进行操作。
int i = 20;
int *p = &i;//p存放变量i的地址,或者说p是指向变量i的指针。

2 指针值

指针的值(即地址)应属于下列4种状态之一:
1指向一个对象。
2指向紧邻对象所占空间的下一个位置。
3空指针不指向任何对象。
4无效指针也就是上述情况之外的值。

利用指针访问对象
如果指针指向了一个对象,则允许使用解应用符(操作符*)来访问该对象。
int i =10 ;
int *p = &i;
cout<<p;//由符号得到指针p所指的对象
指针解引用会得出所指的对象,因此如果给解引用的结果赋值,实际上也是给指针所指的对象赋值。

3 空指针

空指针不指向任何对象。
int *p1 = nullptr;//等价与int *p1=0;
int *p2 = 0;//直接将p2赋值为字面常量0

4 void * 指针

void是一种特殊的指针类型,可以存放任意对象的地址。不能直接操作void指针所指的对象,因为我们并不知道
这个对象到底是什么类型,也就无法确定在这个对象上可以做哪些操作。
int i = 20,*p = &i;
void *v = &i;
v = p;

5 指向指针的指针

指针是内存中的对象,子啊内存中也拥有自己的地址,因此允许将指针的地址存放在另外一个指针中。
通过*的个数区分指针的级别,**是指向指针的指针,***是指向指针的指针的指针。
int i = 10;
int *p1 = &i; //p1是指向int型对象的指针
int **p2 = &p1; //p2是指向int型指针的指针

cout<<*p1;//解引用int 型指针会得到i的值;
cout<<**p2;//解引用指向指针的指针会得到指针,所以需要解两次引用才能都得到i的值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章