註標運算子:[]
postfix-expression [ expression ]
備註
後置運算式 (也可以是主要運算式) 後面會加上指派陣列索引的註標運算子 [ ]。
如需 Managed 陣列的詳細資訊,請參閱陣列 (C++ 元件擴充功能)。
通常,postfix-expression 所代表的值是指標值 (例如陣列識別項),而 expression 則是整數值 (包括列舉類型)。 不過,在語法上需要的是其中一個指標類型的運算式,另一個則是整數類型。 因此,整數值可以在 postfix-expression 位置,而指標值則可以在 expression 的括號中,或是在註標位置。 請考慮下列程式碼片段:
int nArray[5] = { 0, 1, 2, 3, 4 };
cout << nArray[2] << endl; // prints "2"
cout << 2[nArray] << endl; // prints "2"
在上述範例中,運算式 nArray[2] 與 2[nArray] 相同。 其原因是註標運算式 e1**[** e2 ] 是由下列運算式指定:
*( (e2) + (e1) )
運算式所產生的位址不是來自位址 e1 的 e2 位元組。 相反地,這個位址會進行縮放,以產生陣列 e2 中的下一個物件。 例如:
double aDbl[2];
aDb[0] 和 aDb[1] 的位址皆為 8 個位元組,即為 double 類型物件的大小。 此項縮放是由 C++ 語言根據物件類型自動完成,其定義於加法類運算子中,其中會討論指標類型運算元的加法和減法。
註標運算式也可以擁有多個註標,如下所示:
expression1 [expression2] [expression3]...
註標運算式的關聯是由左至右。 最左邊的註標運算式 expression1**[expression2]** 會最先評估。 expression1 和 expression2 相加所產生的位址會形成指標運算式,然後 expression3 會加入這個指標運算式形成新的指標運算式,依此類推,直到加入最後一個註標運算式為止。 除非最後一個指標值定址為陣列類型,否則間接運算子 (*) 會在最後一個註標運算式評估之後套用。
具有多個註標的運算式會參考多維陣列的元素。 所謂的多維陣列是指其中所包含的元素也是一種陣列。 例如,三維陣列的第一個元素是具有兩個維度的陣列。 下列範例會宣告和初始化一個簡單的二維字元陣列:
// expre_Subscript_Operator.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
#define MAX_ROWS 2
#define MAX_COLS 2
int main() {
char c[ MAX_ROWS ][ MAX_COLS ] = { { 'a', 'b' }, { 'c', 'd' } };
for ( int i = 0; i < MAX_ROWS; i++ )
for ( int j = 0; j < MAX_COLS; j++ )
cout << c[ i ][ j ] << endl;
}