配列の初期化

配列の初期化指定子は、中括弧 ({ }) で囲まれた定数式の、コンマ で区切られたリストです。 初期化指定子には、等号 (=) が前に付いています。 配列内のすべてのエレメントを初期化する必要はありません。 配列が部分的に初期化される場合、初期化されないエレメントは、該当する型の 0 の値を受け取ります。 静的ストレージ期間を持つ配列のエレメントについても同じことが適用されます。 (static キーワードで宣言されるすべてのファイル・スコープ変数および関数スコープ変数には、 静的ストレージ期間があります。)

次の定義では、完全に初期化される 1 次元配列を示します。

static int number[3] = { 5, 7, 2 };

配列 number には、次の値が含まれます。 number[0]5number[1]7number[2]2 です。添え字宣言子内の式がエレメント数 (この場合は 3) を定義して いる場合、配列内のエレメント数よりも多くの初期化指定子を持つことはできません。

次の定義では、部分的に初期化される 1 次元配列を示します。

static int number1[3] = { 5, 7 };
number1 の値に 関して、number1[0] および number1[1] は前の定義 と同じですが、number1[2]0 です。

添え字宣言子の式でエレメントの数を定義する代わりに、次の 1 次元配列定義では、指定され た各初期化指定子に対して 1 つのエレメントを定義します。

static int item[ ] = { 1, 2, 3, 4, 5 };

サイズが指定されていなくて、初期化指定子が 5 つあるため、 コンパイラーは item に次の 5 つの初期化されたエレメントを指定します。

次のものを指定して、1 次元の文字配列を初期化できます。

ストリング定数を初期化すると、空いている場所がある場合または配列の次元が指定されていな い場合は、ヌル文字 (¥0) をストリングの終わりに入れます。

以下の定義は、文字配列の初期化を示します。

   static char name1[ ] = { 'J', 'a', 'n' };
   static char name2[ ] = { "Jan" };
   static char name3[4] = "Jan";

以下の定義では、次のエレメントを作成します。

エレメント エレメント エレメント
name1[0] J name2[0] J name3[0] J
name1[1] a name2[1] a name3[1] a
name1[2] n name2[2] n name3[2] n
    name2[3] ¥0 name3[3] ¥0

次の定義では、ヌル文字はなくなります。

   static char name3[3]="Jan";

C++ ストリングを指定して文字の配列を初期化する場合、ストリング内の文字数 -- 終端の「¥0」を含む -- が、 配列の中のエレメント数を超えてはなりません。

次の方法を使用して、多次元配列を初期化できます。

次の定義では、12 のエレメントの配列の中の 6 つのエレメントを明示的に初期化します。

static int matrix[3][4] =
   {
     {1, 2},
     {3, 4},
     {5, 6}
   };

matrix の初期値は、次の表のとおりです。他のすべてのエレメントはゼロに初期化されます。

エレメント エレメント
matrix[0][0] 1 matrix[1][2] 0
matrix[0][1] 2 matrix[1][3] 0
matrix[0][2] 0 matrix[2][0] 5
matrix[0][3] 0 matrix[2][1] 6
matrix[1][0] 3 matrix[2][2] 0
matrix[1][1] 4 matrix[2][3] 0

関連参照

IBM Copyright 2003