配列の宣言

配列宣言子には、ID と、その後に続く、オプションの添え字宣言子 が含まれています。アスタリスク (*) が前に付く ID は、ポインターの配列です。

添え字宣言子の形式は、次のとおりです。

>>-[--+-+---------------------+--+-----------------------+-----+--]-->
      | '-type_qualifier_list-'  '-assignment_expression-'     |
      +-static--+---------------------+--assignment_expression-+
      |         '-type_qualifier_list-'                        |
      +-type_qualifier_list--static--assignment_expression-----+
      '-+---------------------+--*-----------------------------'
        '-type_qualifier_list-'
 
>--+-------------------------------+---------------------------><
   | .---------------------------. |
   | V                           | |
   '---[--constant_expression--]-+-'
 
 

ここで、constant_expression は、配列サイズを示す定数整数式です。これは正でなければいけません。

C 宣言をブロックまたは関数スコープに表示する場合は、非定数式 を配列添え字宣言子に指定することができ、その配列は可変的に変更される型として見なされます。 配列添え字演算子のブラケット内のアスタリスクは、サイズ指定のない可変長配列を示します。 この場合、配列は、定義ではない関数宣言 (つまり、関数プロトタイプ・スコープを使用した宣言) でのみ使用できる、可変的に変更される型と見なされます。

添え字宣言子は、配列の次元の数と各次元のエレメントの数を記述します。大括弧で囲まれた式、または添え字は、別の次元を表し ます。これらは、定数式でなければなりません。

次の例では、char 型が指定された 4 つのエレメントを 含む 1 次元配列を定義します。

char
list[4];

各次元の 1 番目の添え字は、0 です。配列 list には以下のエレメン トが含まれます。

list[0]
list[1]
list[2]
list[3]

次の例では、int 型の 6 つのエレメントを含む 2 次配列を定義します。

int
roster[3][2];

多次元配列は、行方向優先順序で保管されます。 エレメントが、保管場所の昇順で参照される場合、一番後の添え字が一番先に変わります。 例えば、配列 roster のエレメントは、以下の順序で保管されます。

roster[0][0]
roster[0][1]
roster[1][0]
roster[1][1]
roster[2][0]
roster[2][1]

ストレージ内では、roster のエレメントは、以下のように保管されます。

 *               *               *
 
 *---------------*---------------*
 --------------*
 ^               ^               ^
 *               *               *
 roster[0][0]    roster[0][1]
 roster[1][0]

以下の場合には、最初の (最初のみ) 添え字の大括弧のセットを空にしたままにすることができ ます。

最初の添え字の大括弧のセットを空にした配列定義では、初期化指定子が最初の次元のエレメン トの数を決めます。1 次元配列では、初期化されたエレメントの数が、エレメントの合計数になります。多次元配列は、初期化指定子を添え字宣言子 と比較し、第 1 次元のエレメントの数を決めます。

関連参照

IBM Copyright 2003