陣列和指標的問題

藍色的雲tkn發表於2016-02-28

對於一段程式,處理器先進行編譯再執行。無論變數原先是定義為指標還是陣列,編譯器都會根據宣告提取變數的型別地址資訊。接著再根據地址訪問陣列或者指標。

定義宣告為陣列,用陣列訪問:

char a[6]="asdfgh";

c = a[1];

虛擬碼是:取a的值 ;        //編譯器知道a是一個地址常量,所以a的值就是一個地址

                    然後將a的值加上偏移量1,得到一個新的地址;

                    取新地址的值賦給c;

定義宣告為指標,用指標訪問:

char * a="asdfgh";

c = a[1];

虛擬碼是:取a的值 ;        //編譯器知道a是一個指標變數,所以a的值就是a的內容,即一個指向字元的地址

                    然後將a的值加上偏移量1,得到一個新的地址;

                    取新地址的值賦給c;

可見不論是訪問定義宣告的陣列還是定義宣告的指標,c = ‘d’。

當定義為陣列,宣告為指標,訪問時就會出現問題

a[]為一個外部陣列,

extern char *a;

c = a[1];

虛擬碼是:取a的值 ;        //編譯器認為a是一個指標變數,所以a的值就是a的內容,a的內容是a[0],是字元a,將會把a作為一個指向字元的地址來用,顯然是錯誤的。

                    然後將a的值加上偏移量1,得到一個新的地址;

                    取新地址的值賦給c;


地方




相關文章