檔案1中 定義指標 檔案2 宣告為陣列
char *str =」abcd」;//在檔案1中
extern char str;//在檔案2中
在檔案1中str這個變數裡面儲存了乙個字串的首位址假設是0x12345678 ,這個位址裡面存了a ,後面的位址存放了b 依次類推
在檔案2中使用的時候會出現的問題:
char c = str[0]; //本來我們會覺得變數c的值應該是a,事實上是0x78
char c = str[1]; //本來我們會覺得變數c的值應該是b,事實上是 0x56
char c = str[2]; //本來我們會覺得變數c的值應該是c,事實上是 0x34
char c = str[3]; //本來我們會覺得變數c的值應該是c,事實上是 0x12
原因在於指標裡面存的是位址,通過這個位址找到我們想要的字串,而編譯器把這個指標變數str 裡面存的位址0x12345678 當作了陣列str裡面的值 str[0]就會是0x78
為了便於對比以16進製制來看是0x78,事實上除錯的時候會顯示這個值代表的字元,看記憶體的時候,可以選擇10進製或者16進製制顯示
故 在乙個檔案中定義為指標 在另乙個檔案中也要宣告為指標
但是使用的時候可以用 下標的形式訪問,比如str[0] 但是前提是宣告為指標。
定義為陣列,宣告為指標
檔案1中 定義陣列 檔案2 宣告為指標 char str abcd 在檔案1中 extern char str 在檔案2中 檔案1中定義乙個陣列str,裡面存了abcd 假設陣列首元素的首位址為0x00000001 那麼 0x00000001裡面存了a,0x00000002裡面存了b 檔案2中宣告成...
指標和陣列的定義與宣告
在這裡我們做種強調的是在兩個檔案中,定義為陣列宣告為指標和定義為指宣告為陣列的這輛中情況。那麼我們就需要兩個原始檔test.c和main.c。定義為陣列,宣告為指標 test.c char arr abcdef main.c define crt secure no warnings 1 inclu...
struct的申明,宣告為指標與變數的區別
include stdio.h include stdlib.h struct ssd ch lun alloc int main void struct ssd ch lun alloc alloc 12 陣列變數,已經賦值的情況下,在棧中 struct ssd ch lun alloc test...