次の方法で共有


多次元配列 (C)

添字式には、次のように複数の添字がある場合があります。

expression1 [ expression2 ] [ expression3 ] /*...*/ ;

添字式は、左から右へ関連付けられます。 左端の添字式、expression1[ expression2 ] が最初に評価されます。 expression1expression2 を加算した結果として得られるアドレスからポインター式が形成され、次にこのポインター式に expression3 が加算されて新しいポインター式が形成されます。このようにして、最後の添字式が加算されるまで処理が行われます。 間接演算子 (*) は、最終的なポインター値が配列型のアドレスを指していない限り、最後の添字式が評価された後で適用されます。

複数の添字を含む式は、"多次元配列" の要素を参照します。多次元配列は、その要素が配列である配列です。 たとえば、3 次元配列の最初の要素は 2 次元配列です。

使用例

以下では、その後の各例で使用するために、prop という名前の配列を宣言しています。この配列には 3 つの要素があり、各要素は int 値の 4 × 6 配列になっています。

int prop[3][4][6];
int i, *ip, (*ipp)[6];

prop 配列を参照するときには、次のようになります。

i = prop[0][0][1];

この例は、prop の個々の int 要素の 2 番目を参照する方法を示しています。 配列は行ごとに格納されるので、最後の添字が最も速く変化します。そのため、たとえば配列の次の (3 番目の) 要素を参照する式は、prop[0][0][2] のようになります。

i = prop[2][1][3];

このステートメントは、prop の個々の要素への、より複雑な参照です。 この式は、次のように評価されます。

  1. 最初の添字 2 に、4 × 6 の int 配列のサイズが乗算され、それがポインター値 prop に加算されます。 結果は、prop の 3 番目の 4 × 6 配列をポイントします。

  2. 2 番目の添字 1 に 6 要素の int 配列のサイズが乗算され、それが prop[2] で表されるアドレスに加算されます。

  3. 6 つの要素を持つ配列の各要素は int 値であるため、最後の添字の 3int のサイズが乗算され、それが prop[2][1] に加算されます。 結果のポインターは 6 要素配列の 4 番目の要素のアドレスを指します。

  4. このポインター値に間接演算子が適用されます。 結果は、そのアドレスにある int 要素です。

次の 2 つの例は、間接演算子が適用されないケースを示しています。

ip = prop[2][1];

ipp = prop[2];

この最初のステートメントの式 prop[2][1] は、(以前に宣言した) 3 次元配列 prop への有効な参照で、この場合は 1 つの 6 要素配列を参照しています。 ポインター値は配列のアドレスを指すため、間接演算子は適用されません。

同様に、2 番目のステートメント prop[2] の式 ipp = prop[2]; の結果は、1 つの 2 次元配列のアドレスを指すポインター値です。

関連項目

添字演算子: