多次元配列の初期化

多次元配列もまた、宣言と同時に初期化することができます。通常、多次元配列を初期化する場合は、各次元ごとに大括弧 { } で囲んだ初期化子並びを指定します。初期化子の中に、別の初期化子が入れ子になっているようなものだと考えてください。初期化子で指定された値の数が配列のサイズよりも少ない場合、残りの要素は0で初期化されます。

例えば、2次元配列は次のように初期化できます。

int items[2][3] =
{
    { 0, 1, 2 },
    { 10, 11, 12 }
};

上記の方法で初期化すると、内側の { } で囲まれた初期化子が次元に対応し、その中に指定されている各値が各次元ごとの要素となります。内側の最初の初期化子並び { 0, 1, 2 } は items[0] の要素の初期化に用いられ、次の { 10, 11, 12 } がitems[1]の要素の初期化に用いられます。

サンプル06

#include <stdio.h>

int main(void)
{
    int i, j;
    int items[2][3] =
    {
        { 10, 20, 30 },
        { 100, 200, 300 },
    };

    for(i = 0 ; i < 2 ; i++)
    {
        for(j = 0 ; j < 3 ; j++)
        {
            printf("items[%d][%d]=%d, ", i, j, items[i][j]);
        }
        printf("\n");
    }

    return 0;
}

実行結果

サンプル06の実行結果

サンプル06では、2 × 3 要素の2次元配列itemsを宣言し、同時に初期化しています。実行結果を見れば、配列の各要素に、適切に値が保存されていることを確認できます。

多次元配列の初期化は、1つの初期化子並びからでも可能です。この場合、先頭の次元の先頭の要素から順に、初期化子に指定されている値が対応します。

 int items[2][2] = { 0, 1, 2, 3 };

上記の場合 items[0]次元の要素から順に初期化されます。よって、items[0][0]に0が保存され、items[0][1]に1が保存されます。この時点でitems[0]のすべての要素が初期化されたので、次の配列に進んでitems[1][0]に2が、items[1][1]に3が保存されることになります。

サンプル07

#include <stdio.h>

int main(void)
{
    int i, j;
    int items[2][3] = { 10, 20, 30, 100, 200, 300 };

    for(i = 0 ; i < 2 ; i++) {
        for(j = 0 ; j < 3 ; j++) {
            printf("items[%d][%d]=%d, ", i, j, items[i][j]);
        }
        printf("\n");
    }

    return 0;
}

実行結果

サンプル07の実行結果

サンプル07は、1つの初期化子並びから2次元配列を初期化しています。この 配列は2 × 3の2次元配列なので、最大で6つの要素まで指定できます。