後置運算式後面跟著以方括號 ([ ]
) 括住的運算式,是陣列物件元素的註標表示法。 當註標運算式如下表示時,它代表超出 postfix-expression
expression
個位置的位址值
postfix-expression
[
expression
]
通常,postfix-expression
所代表的值是指標值,例如陣列識別碼,而 expression
則是整數值。 不過,在語法上只需要其中一個運算式為指標類型,而另一個則是整數類型。 整數值可以在 postfix-expression
位置,而指標值則可以在 expression
的括號中,或是在「註標」位置。 例如,以下這個程式碼是合法的:
// one_dimensional_arrays.c
int sum, *ptr, a[10];
int main() {
ptr = a;
sum = 4[ptr];
}
註標運算式通常用來參考陣列元素,但是您可以將註標套用到任何指標。 無論值的順序為何,expression
都必須以方括號 ([ ]
) 括住。
評估註標運算式的方式是在指標值中加入整數值,然後將間接運算子 (*
) 套用到結果。 (如需間接運算子的相關討論,請參閱間接和傳址運算子)。實際上,假設 a
是指標而 b
是整數,下列四個運算式對一維陣列而言是相等的:
a[b]
*(a + b)
*(b + a)
b[a]
加法運算子的轉換規則會在[加法運算符]中指定)。 若要將整數值轉換成位址位移,它會乘以指標尋址的類型長度。
例如,假設識別項 line
參考 int
值的陣列。 下列程序用於評估註標運算式 line[ i ]
:
整數值
i
乘以定義為int
項目長度的位元組數目。i
的轉換值代表i
int
位置。轉換後的值會和原始指標值 (
line
) 相加,產生從line
位移i
int
個位置的位址。將間接運算子套用至新的位址。 結果是在該位置之陣列元素 (憑直覺是
line [ i ]
) 的值。
註標運算式 line[0]
代表該行第一個元素的值,因為從 line
代表的位址位移是 0。 同樣地,運算式 (如 line[5]
) 會參考從程式行位移五個位置的元素,或是陣列的第六個元素。