關於指針的一些理解

1. 指針的定義

指針保存的是所指向的對象的地址。

int a = 3;
int *p = &a; // 定義一個指向整形數a的指針p,此處,int代表p是指向一個整形數的指針,*表明
             // 當前定義的是一個指針,p的值爲&a,即a的地址

上面的指針也可以這樣定義

int *p;
p = &a;


2. 指針的指針

同理,我們可以定義一個指向指針的指針, 它保存的是所指向的指針的地址

int a = 3;
int *p = &a;
int **q = &p; //**說明是指向指針的指針


3. 指針內容的讀取

上面的程序中,指針p的值是a的地址,我們想通過p來得到a的值,則用*p; 通過q來獲取a的值,則用**q。

printf("a's address is: %p.\n", &a); 
printf("p's value is: %p.\n", p); //地址的佔位符都是%p
printf("p 指向的對象的值: %d.\n", *p);
printf("p's address is : %p.\n", &p);
printf("q's value is: %p.\n", q);
printf("q 指向的指針的值: %p.\n", *q);
printf("q 指向的指針指向的對象的值: %d.\n", **q);

上面代碼的輸出:

a's address is: 0x7fff5bce5a9c.

p's value is: 0x7fff5bce5a9c.

p 指向的對象的值: 3.

p's address is : 0x7fff5bce5a90.

q's value is: 0x7fff5bce5a90.

q 指向的指針的值: 0x7fff5bce5a9c.

q 指向的指針指向的對象的值: 3.


實際上就是說:

a == *p == **q; 

&a == p == *q;

&p = q;


ID:qpa
地址:&q   &p&a
值:&p   &a  3

                 


                   

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