兩個文件
array_define.c
編譯連接這兩個文件,並運行
gcc array_and_pointer.c array_define.c -o array_and_pointer
運行這個程序,會被系統中止
看下面的代碼
我們發現,p這個指針的值是字符串,“i love you" 中的前4個字符,就是說,它他前四個字符作為自己指向的一個地址,所以第一個例子會出錯.
輸出的第二行,才是真正字符串"i love you"開始的地址。
再看下面的例子
從運行結果我們知道,p 和 &p 的內容是一樣的,也就是字符串開始的地址,所以對於數組來說,數組名可以說只是字符串首地址的別名,用數組名就等於用首地址。
運行結果的第三行是p[3] 也就是 ‘o’ 這個字符的地址。
從上面幾個例子可以知道,數組只是用了一個別名來代表數組的首地址。而指針,是存放了數組的首地址,通過指針訪問數組,進行了兩步,先訪問指針保存的數組首地址,再通過那個地址訪問數組。
現在回到第一個例子,如果我們就是想通過 extern char *p 來訪問數組怎麼辦?
看下面的例子
我們首先通過 &p 取出字符串的首地址,然後將這個地址強制轉換成一個char型指針(不知道這樣說對不對,如果不對,請大家一定指正),然後把它的偏移量加3,再取這個地址的內容,就可以訪問第三個字符了。
如果有不對的地方,請大家一定指正,謝謝。