註標運算式也可以擁有多個註標,如下所示:
expression1 [ expression2 ] [ expression3 ] /*...*/ ;
註標運算式的關聯是由左至右。 最左邊的下標表達式 expression1[ expression2 ]
會先評估。 新增 expression1
並 expression2
形成指標表示式所產生的位址,然後將 expression3
新增至此指標表示式,以形成新的指標表達式等等,直到加入最後一個下標表達式為止。 間接運算子 (*
) 會在評估最後一個下標表達式之後套用,除非最終指標值處理數位類型。
具有多個註標的表達式是指「多維度陣列」的專案。多維度陣列是陣列,其元素為陣列。 例如,三維陣列的第一個元素是具有兩個維度的陣列。
範例
在下列範例中,名為 prop
的陣列中宣告了三個元素,每個元素都是 4x6 的 int
值陣列。
int prop[3][4][6];
int i, *ip, (*ipp)[6];
prop
陣列參考的外觀如下:
i = prop[0][0][1];
此範例示範如何參考 的第prop
二個個別int
專案。 陣列會依資料列儲存,因此最後一個註標變化的速度更快,而 prop[0][0][2]
運算式會參考陣列的下一個 (第三個) 元素,依此類推。
i = prop[2][1][3];
這個陳述式對於 prop
的個別元素來說是更為複雜的參考。 運算式 的評估方式如下:
第一個註標
2
會乘以 4x6int
陣列的大小,並且增加至指標值prop
。 結果會指向prop
的第三個 4x6 陣列。第二個註標
1
會乘以 6 個元素int
陣列的大小,並且增加至prop[2]
所代表的位址。6 元素陣列的每個元素都是一個
int
值,因此,最後的下標3
會乘以 的大小int
,再加入至prop[2][1]
。 產生的指標會定址 6 個元素陣列的第四個元素。間接運算子會套用至指標值。 結果會是位於該位址的
int
元素。
接下來的兩個範例顯示未套用間接運算符的情況。
ip = prop[2][1];
ipp = prop[2];
在這些語句的第一個語句中,表達式 prop[2][1]
是三維陣列的有效參考;它指的是 6 元素陣列 prop
(先前宣告)。 由於指標值會處理陣列,因此不會套用間接運算符。
同樣地,第二個陳述式 prop[2]
中 ipp = prop[2];
運算式的結果是定址二維陣列的指標值。