共用方式為


註標運算子:[]

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) )

運算式所產生的位址不是來自位址 e1e2 位元組。 相反地,這個位址會進行縮放,以產生陣列 e2 中的下一個物件。 例如:

double aDbl[2];

aDb[0] 和 aDb[1] 的位址皆為 8 個位元組,即為 double 類型物件的大小。 此項縮放是由 C++ 語言根據物件類型自動完成,其定義於加法類運算子中,其中會討論指標類型運算元的加法和減法。

註標運算式也可以擁有多個註標,如下所示:

expression1 [expression2] [expression3]...

註標運算式的關聯是由左至右。 最左邊的註標運算式 expression1**[expression2]** 會最先評估。 expression1expression2 相加所產生的位址會形成指標運算式,然後 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;
}

請參閱

參考

後置運算式

C++ 運算子

C++ 運算子、優先順序和順序關聯性

陣列 (C++)

概念

一維陣列

多維陣列 (C)