多次元配列

表のようなデータを管理することを考えてください。表は、行と列(縦と横)の2次元の空間に情報が並べられています。ある情報を参照するには行番号と列番号の2つの値が必要になります。身近なのはMicrosoft Excelのような票でしょう。このようなデータを扱う場合、ある配列の要素が別の配列のように機能する2次元配列を用いると便利です。このような、複数の次元からなる配列を多次元配列とも呼びます。3次元配列や、4次元配列といった、任意の次元数からなる多次元配列を実現することも可能です。

多次元配列を宣言するには、次元ごとに配列宣言子を指定します。一般には、次のような形になります。

型 変数名 [ 定数式 ] [ 定数式 ] ... ;

このように、多次元配列の宣言には次元の数だけ配列宣言子 [ ] を記述し、各次元の要素数を指定します。

例えば、2行3列の整数型の配列の宣言は、次のようになります。

int items[2][3];

上記の場合、items 配列は 2 × 3 要素のサイズ、すなわち6要素を持つ2次元配列となります。

items[0][0]     items[0][1]     items[0][2]
items[1][0]     items[1][1]     items[1][1]

多次元配列への要素にアクセスするには、次元の数だけ添字を指定します。

items[0][0] = x;
x = items[0][0];

要素の位置を表すための添字が増えたというだけで、基本的な性質は通常の配列と同じです。

サンプル05

#include <stdio.h>

int main(void)
{
    int items[2][2];

    items[0][0] = 10;
    items[0][1] = 20;
    items[1][0] = 100;
    items[1][1] = 200;

    printf("items[0][0]=%d\n", items[0][0]);
    printf("items[0][1]=%d\n", items[0][1]);
    printf("items[1][0]=%d\n", items[1][0]);
    printf("items[1][1]=%d\n", items[1][1]);

    return 0;
}

実行結果

サンプル05の実行結果

サンプル05では、2 × 2 の2次元配列itemsを宣言しています。その後、この配列の各要素に値を代入し、printf()関数で要素の値を出力しています。要素へのアクセスに2つの添え字が必要である点を除けば、基本的な扱いは通常の配列と同じです。

一般的なデータを扱う範囲においては2次元配列までがほとんどで、一部のグラフィックスなどのアルゴリズムで4次元配列までが使われるといった程度です。不要に多次元配列を濫用するとデータ構造が複雑になるだけで、一般には2次元配列までとするべきです。