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: | q | p | a |
地址: | &q | &p | &a |
值: | &p | &a | 3 |