標籤:http os 檔案 2014 io re
指標儲存的是記憶體位址,那麼當代碼執行
int *iptr;int a;iptr = &a;
它表示iptr指向了a所在的記憶體位址。那麼若執行
*iptr = 10;printf("a = %d\n",a);
那麼a的值為多少呢?
可以簡單地寫一個程式 cpoint1.c
#include<stdio.h>int main(){int a;int *iptr;iptr = &a;*iptr = 10;printf("a = %d\n",a);}
在終端上利用gcc編譯
#gcc cpoint1.c
執行後產生a.out執行檔案
./a.out
會看到列印的是 a = 10
這裡可理解為指標iptr指向了a所在的記憶體位址,那麼當執行
*iptr = 10;
時,實際就是將10存到a所在的記憶體位址中。
現在瞭解了指標的基本概念,那麼什麼是指標的指標呢?
首先,假設小明、小華、小新他們三個是朋友,但是小明只有小華的電話號碼,而小華只有小新的電話號碼。那麼如果小明想找小新的話,就得先聯絡小華,通過小華聯絡小新。
如果將小華和小新都當做一個記憶體的地址,那麼小明指向小華,可理解為一級指標,小華再指向小新,這樣就成了指標的指標。
int *iptr;int a;int **jptr;
上面已經知道了
iptr = &a;
指的是將a所在的記憶體位址賦值給iptr
那麼jptr這個指標又該如何賦值。剛才小明小華小新的例子,可以這樣解剖
int **小明;int *小華;int 小新;
首先小明要得到小新的地址,那麼要通過小華。所以有
小華 = &小新;
這樣小華就指向了小新,得到小新的地址,然後再將小華的地址轉給小明,這樣就可以完成小明得到小新的地址
小明 = &小華;
接下來看下面的程式 cpoint2.c
#include<stdio.h>int main(){int a;int *iptr;int **jptr;iptr = &a;jptr = &iptr;a = 10;printf("jptr = %d\n",**jptr);}
#gcc cpoint2.c
編譯執行的結果為:
jptr = 10
看明白了嗎?