close
在看書時無意看見一段程式碼如下:
1 2 |
char *cmd; asprintf(&cmd, “strings %s”, in); // in 是一個字元陣列指標 |
忽然覺得疑問,&cmd的輸出值是什麼? 猜想了一下決定寫程式來印證一下自己的想法:&cmd其實是存放cmd char pointer 的address.
這看起來像是廢話,不過我只是好奇指標本身就存放一個address value,那指標的address跟該指標本身存放的address value是不是不一樣?答案當然不一樣,但我只是想進一步釐清一下三者的關係:
- 指標位址(Pointer Address): 就是存放指標變數的記憶體空間之位址。
- 指標內容(Pointer Value) : 就是指標本身的內容,應該是一個address值,其指向某實體數值。
- 指標指向內容(Pointer points Value): 指標指向的位置空間所存放的內容。
所以前兩者應該都是Address Value,只有最後是真實的Value,為了印證這想法,我寫了以下程式來驗證:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { char *cmd="def"; printf("cmd pointer address : %p\n", &cmd); printf("cmd pointer value : %p\n",cmd); printf("cmd pointer point to a content: %s\n", cmd); //char const *in = "abc"; //asprintf(&cmd," %s", in); //free(cmd); } |
然後存成檔案 ptr_and.c 之後用 gcc的c99標準編譯程式並得到如下執行結果:
可以看到pointer address( &cmd)印出的是指標在記憶體中的位置0xffffcbf8,而pointer value(cmd)也是印出記憶體位置0x100403000,但這是pointer 所內含的數值,其指向的是位於0x100403000空間的”def”字串。
二○一八年七月十九日星期四
文章標籤
全站熱搜