陣列和指標的問題
對於一段程式,處理器先進行編譯再執行。無論變數原先是定義為指標還是陣列,編譯器都會根據宣告提取變數的型別地址資訊。接著再根據地址訪問陣列或者指標。
定義宣告為陣列,用陣列訪問:
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;
地方
相關文章
- 關於二維陣列指標的問題陣列指標
- C++ 指標陣列與陣列指標的區別C++指標陣列
- C語言:陣列和指標的區別C語言陣列指標
- C: (pointer) 陣列變數和指標的區別陣列變數指標
- 二維陣列的指標的理解陣列指標
- 徹底搞清C/C++中一維陣列,二維陣列,指標,陣列指標和指標陣列以及指向指標的指標,行地址和列地址之間的關係C++陣列指標
- 陣列指標和指標陣列陣列指標
- 指標陣列和陣列指標與二維陣列指標陣列
- C/C++——指向函式的指標和指向函式的指標的陣列C++函式指標陣列
- 淺議C語言中靈魂陣列和指標的互操作(轉)C語言陣列指標
- 深入探索 C/C++ 陣列與指標的奧祕之一:陣列與指標概念剖析C++陣列指標
- 陣列和指標陣列指標
- 指標和陣列指標陣列
- 指標問題的一點體會(區別 [指向指標的指標] 與 [指標的指標] .) (轉)指標
- 雙指標查詢陣列的連續規律子陣列問題指標陣列
- C----陣列越界問題、指標入門陣列指標
- 陣列指標,指標陣列陣列指標
- 陣列指標 指標陣列陣列指標
- 詳解c++指標的指標和指標的引用C++指標
- C陣列和指標陣列指標
- 指標陣列與陣列指標指標陣列
- C語言指標和陣列筆試題C語言指標陣列筆試
- Golang 學習——陣列指標和指標陣列的區別Golang陣列指標
- vue 陣列和物件渲染問題Vue陣列物件
- 陣列累加和問題三連陣列
- 子陣列異或和問題陣列
- 二維陣列和指標陣列指標
- 陣列和列表的轉換問題陣列
- 最大子陣列和問題的解陣列
- Go 陣列指標(指向陣列的指標)Go陣列指標
- 深入探索 C/C++ 陣列與指標的奧祕之二:陣列名是一個指標常量嗎?C++陣列指標
- 由sizeof()引出的對陣列名和指標的新認識陣列指標
- php陣列問題PHP陣列
- 指標和二位陣列指標陣列
- c中關於指標的宣告和定義的一些問題指標
- 棧和佇列:滑動視窗和陣列變樹問題佇列陣列
- 指標的申明和定義指標
- 【char* 字元指標的用法】及【輸出NULL的問題】字元指標Null