多維陣列中的下標引用如何工作的?

2021-10-12 15:24:57 字數 2002 閱讀 5019

如果要標示乙個多維陣列的某個元素,必須按照與陣列宣告時相同的順序為每一維都提供乙個下標,而且每個下標都單獨位於一對方括號內:

int matrix[3][10];
表示式:matrix[1][5]

訪問這個元素:

但是下標引用實際上只是間接訪問表示式的一種偽裝形式,在多維陣列中也是如此。

表示式:matrix它是  指向包含10個整型元素的陣列的指標,指向包含10個整型元素的第1個子陣列。

表示式: matrix+1也是 指向包含10個整型元素的陣列的指標,指向matrix的另一行。

1 這個值會根據包含10個整型元素的陣列的長度進行調整,所以它指向matrix的下一行。

如果對其執行間接訪問操作就如下面箭頭箭頭選擇中間這個子陣列:

所以

表示式:*(matrix+1)事實上標識了乙個包含10個整型元素的子陣列。

陣列名的值是乙個常量指標,它指向陣列的第乙個元素,如下圖,在這個表示式中也是如此。

這個表示式就是表示「指向整型的指標」,可以在下一維的上下文中顯示它的值。

表示式:*(matrix + 1) + 5我們知道了前面的部分是乙個指向整型元素的指標,就是指向第二個子陣列的第乙個元素,然後+5就是這個指標向後移動5個整型元素,如下圖:

表示式:*(*(matrix + 1) + 5)這個表示式就是對上圖指標所指向的位置間接訪問,如果作為右值就是取得其位置儲存的值,如果作為左值就會儲存乙個新值。

其中 *(matrix + 1)其實就是matrix[1],所以:

*(*(matrix + 1) + 5)    ==  *(matrix[1] + 5)

*(matrix[1] + 5)這個表示式完全合法,matrix[1]選定子陣列,它的型別是乙個指向整型的指標,對這個指標+5,然後執行間接訪問操作。

我們可以再次用下標代替訪問:

matrix[1][5]

這楊,即使對於多維陣列,下標仍然是另一種形式的間接訪問表示式。

小結:

陣列是從左向右進行計算的,陣列名是乙個指向第1維第1個元素的指標,所以第1個下標值根據該元素的長度進行調整。

它的結果是乙個指向那一維中所需元素的指標。間接訪問操作隨後選擇那個特定的元素,由於該元素本身是個陣列,所以這個表示式的型別是乙個指向下一維第1個元素的指標。

下乙個下標值根據這個長度進行調整,這個過程重複進行,知道所有的下標均計算完。

C語言 指標篇 三 陣列的下標引用和指標訪問

1.以下標引用的方式訪問陣列 在使用陣列的場合中,我們常見的一種訪問方法是使用下標訪問陣列元素,如 array 2 1,此語句是將該陣列的第三個元素賦值為1.符號中的數字可以認為是在陣列基位址上的偏移量,可以通過改變這個偏移量來訪問整個陣列。2.以指標訪問的方式訪問陣列 除了使用偏移量的方法,我們還...

JAVA中的多維陣列

宣告乙個二維陣列 int matrix new int 5 5 或者使用 int matrix 這是乙個直接初始化的格式 獲取二維陣列的長度。int martix new int 3 4 那麼martix.length 3 即行數 matrix 0 length 4 即列數 建立乙個鋸齒陣列 int...

C C 中的多維陣列

1 針對多維陣列,要記住 c primer 中關於多維陣列的描述,多維陣列的陣列名指向最外層的變數。int ip 6 3 3 int ip1 3 3 可以這麼理解,ip表示乙個指標,該指標指向的位址存放的資料資料型別為乙個3x3的int型陣列,ip仍是乙個一級指標 2 多維陣列中的資料在記憶體中是連...