數組和指針的問題

對於一段程序,處理器先進行編譯再運行。無論變量原先是定義爲指針還是數組,編譯器都會根據聲明提取變量的類型地址信息。接着再根據地址訪問數組或者指針。

定義聲明爲數組,用數組訪問:

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;


地方




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章