指針的理解

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的值。

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