陣列指標與二維陣列

2021-06-18 07:48:31 字數 622 閱讀 8458

陣列指標的概念一直就沒理解太清楚,中間有很多次,以為清楚了,但是還沒有真正的了解清楚。要洞察這裡面的問題,就首先要了解編譯器在這裡面做了什麼。

char a[6]=;

這裡宣告並定義了乙個二維陣列,編譯器採用直接賦值的方式給一塊連續記憶體賦值。

char(*b)[6]=a;

這裡宣告並定義了乙個陣列指標,指向二維陣列。陣列指標和普通指標如何區別呢?在記憶體裡面其實他們都是乙個變數,儲存的都是乙個位址,位址儲存的都是「普通變數」的值。因此他們並沒有多少區別。關鍵的區別就在於程式語言中,陣列指標可以「兩次解引用」——比如**b(這一點類似於二級指標,注意區別),普通指標只可以「一次解引用」。

那麼*b代表的意思和**b代表的意思有什麼不同呢。

*b代表的是一維陣列。**b代表的是一維陣列中的元素。

int addressa=(int)a;

int addressp=(int)b; //&a[0]

int addresspx=(int)(*b); //&a[0][0]

因為a=&a[0]=&a[0][0],所以上面三個位址都是相同的。

二維陣列 指標陣列與陣列指標

一 首先我們從字面意思理解一下什麼是指標陣列什麼是陣列指標 1 指標陣列 本質是乙個陣列,陣列中的每乙個元素是乙個指標。2 陣列指標 本質是乙個指標,而指標指向乙個陣列。二 我們該怎麼區分指標陣列和陣列指標?1 總共有三種表示形式 int p 4 和int p 4 和int p 4 表面看起來是不是...

陣列指標與二維陣列

很多人認為二維陣列的實現是用二級指標偏移實現的,這是錯誤的 二維陣列通過兩次偏移獲取到陣列中的某乙個元素,所使用的指標是陣列指標,陣列指標是一級指標。include include 本質是陣列指標,必須寫4所在這一維 void print int p 4 int row printf n intma...

二維陣列與二維指標

1.二維陣列的儲存是線性的,可以通過一維指標的方式訪問。如一下 int map 5 5 int mapd map 0 0 則 map i j mapd i 5 j 而利用二維陣列線性儲存的特性,可以將二維陣列當作一維指標方便的在函式之間傳遞 如 將乙個二維陣列賦值給乙個動態二維陣列,引數設定為一維指...