定義為指標,宣告為陣列

2021-07-10 21:52:55 字數 732 閱讀 5874

檔案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...