二維陣列與陣列指標的使用

2021-07-23 13:40:29 字數 1116 閱讀 5184

二維陣列的顧名思義有兩個維度, 在這裡, 我們可以把它看做是乙個矩陣, 方便理解, 一維度代表行, 一維度代表列。

首先從二維陣列的定義說起,二維陣列的定義及初始化有很多種形式。

1.分行初始化 int a[3][3] = ,,};

2.順序初始化 int a[3][3] = ;

3.省略航長度 int a[3]  =  編譯器以3為1行,自動劃分行, 省略行長必須以順序初始化的格式進行初始化,不能以{}形式進行初始化。

4.分行部分初始化 int a[3][3] = , , };  可以不全部初始化, 不足的部分, 編譯器置零。

上述定義中, 第乙個引數代表的是行數(實際上是第幾個陣列), 第二個引數代表列數(實際上是這個陣列有幾個變數)。

二維陣列的使用問題:

1.陣列名代表第乙個陣列的首位址, 在sizeof和 &a時, a代表整個二維陣列。其餘情況代表第乙個陣列的首位址。 a + 1 代表第二個陣列的首位址。

2.a[0], 在sizeof 和 &的時候, 代表第乙個陣列整個陣列 ,計算大小和運算的時候都是以第乙個陣列整個陣列的大小進行運算。在其餘情況下, 代表第乙個陣列第乙個元素的位址, +1 就指向了第乙個陣列第二個元素, 也就是 a[0][1]這個元素的位址。(想要使用陣列元素, 必須在a[n]這個層面進行操作)

3.雖然a的位址不變, 但是不同的操作還是代表了不同的含義, a代表了第幾個陣列, 對a進行操作, 就是在不同陣列上進行切換。使用具體某個元素,是某個陣列的成員, 所以需要告訴編譯器,這個成員在哪個陣列,確定了哪個陣列, 然後確定某個元素。 *(a + 1)相當於選定了第二個陣列, 這時*(a+1)代表的是第二個陣列的第乙個元素的位址, (*(a+1) + 1)這個表示式仍然是位址, 指向的是第二個陣列第二個元素的位址, 再進行* 操作就是資料了。

陣列指標的使用:

陣列指標實質是乙個指向陣列的指標, 而針織陣列實質上是乙個成員是指標的陣列。

陣列指標指向的是陣列, 以上面定義為例, 陣列指標使用如下, int (*p)[3] = a; p就指向了a這個陣列,[3]代表了指向陣列的成員的個數, 也就是說對p進行+ -等操作, 都是以3個成員的大小進行的, 在某個程度上, 它與陣列名一樣, 使用具體元素, 也需要進行* 或者操作, 選定具體的陣列然後進行操作。 

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

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

陣列指標與二維陣列

陣列指標的概念一直就沒理解太清楚,中間有很多次,以為清楚了,但是還沒有真正的了解清楚。要洞察這裡面的問題,就首先要了解編譯器在這裡面做了什麼。char a 6 這裡宣告並定義了乙個二維陣列,編譯器採用直接賦值的方式給一塊連續記憶體賦值。char b 6 a 這裡宣告並定義了乙個陣列指標,指向二維陣列...

陣列指標與二維陣列

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