
C言語のきほん|多次元配列の使い方
表のようにデータを扱おう!C言語で理解する多次元配列の基本
配列は、同じ型のデータをまとめて管理するための便利な仕組みです。これまで学んできた1次元配列は、一直線に並んだデータを扱うためのものでした。たとえばテストの点数を並べたり、センサーの値を順番に保存したりするような場合に使われます。
しかし実際のプログラムでは、行と列のような形でデータを管理したい場面がよくあります。
たとえば次のようなデータです。
- 学生ごとの科目の点数
- カレンダーのような表形式データ
- ゲームのマップ
- 画像データ(縦×横の画素)
このような「表のような構造」を扱うときに使われるのが 多次元配列 です。
1次元配列を「縦に並んだ箱の棚」と考えると、多次元配列は「縦にも横にも広がった棚」のようなものです。
特に最もよく使われるのが 2次元配列 で、行と列を持つデータ構造になります。
この章では、多次元配列の基本として次の内容を学んでいきます。
- 2次元配列の宣言方法
- 配列のメモリ上での並び方
- 行と列を使ったデータの扱い方
- 繰り返し処理での利用方法
少しだけ考え方が広がりますが、基本は1次元配列と同じです。ゆっくり整理しながら理解していきましょう。
多次元配列とは何か
多次元配列とは、複数の添字を使ってデータを管理する配列のことです。
1次元配列は次のように1つの添字でアクセスします。
data[0]
data[1]
data[2]
一方、2次元配列では 行と列の2つの添字を使います。
data[行][列]
例えば次のような形です。
| 行\列 | 0 | 1 | 2 |
|---|---|---|---|
| 0 | data[0][0] | data[0][1] | data[0][2] |
| 1 | data[1][0] | data[1][1] | data[1][2] |
このように、表のセルを指定するようなイメージでデータにアクセスできます。
2次元配列の宣言
2次元配列を宣言する構文は次のようになります。
型名 配列名[行の要素数][列の要素数];
例えば、3人の学生の4回のテスト結果を保存する配列を作る場合は次のように書きます。
int scores[3][4];
この宣言の意味は次の通りです。
| 項目 | 意味 |
|---|---|
| 3 | 学生の人数 |
| 4 | テストの回数 |
| scores | 点数を保存する配列 |
つまり次のような表を表現できます。
| 学生 | テスト1 | テスト2 | テスト3 | テスト4 |
|---|---|---|---|---|
| 学生0 | scores[0][0] | scores[0][1] | scores[0][2] | scores[0][3] |
| 学生1 | scores[1][0] | scores[1][1] | scores[1][2] | scores[1][3] |
| 学生2 | scores[2][0] | scores[2][1] | scores[2][2] | scores[2][3] |
このように、行と列の組み合わせでデータを管理できるのが2次元配列の特徴です。
2次元配列のイメージ
2次元配列は、表のような構造として理解すると分かりやすいです。

例えば
scores[1][2]
は
2人目の学生の3回目のテストを意味します。
メモリ上での配列の並び
2次元配列は表のように見えますが、実際のメモリ上ではすべて連続した領域に並んでいます。

この並び方は 行優先(row major order) と呼ばれます。
そのため、次のように行を順番に処理するループがよく使われます。
2次元配列を使うシンプルなプログラム例
次は、2人分の3日間の気温データを表示するプログラムです。
2次元配列を使って表形式のデータを管理しています。
ファイル名:10_7_1.c
#include <stdio.h>
int main(void)
{
int temperature[2][3] = {
{25, 27, 26},
{24, 26, 28}
};
int i, j;
printf("2日分の気温データを表示します\n");
for (i = 0; i < 2; i++) {
printf("%d日目の気温: ", i + 1);
for (j = 0; j < 3; j++) {
printf("%d ", temperature[i][j]);
}
printf("\n");
}
return 0;
}プログラムのポイント
| ポイント | 説明 |
|---|---|
| temperature[2][3] | 2行3列の配列 |
| 外側のfor | 日数のループ |
| 内側のfor | 時間ごとのデータ |
このように、2次元配列ではループを2重にすることで簡単にデータを処理できます。
処理の流れは次のようになります。
1日目
25 27 26
2日目
24 26 282重ループと多次元配列
多次元配列を扱うときは、繰り返し処理を組み合わせることがとても重要です。
基本形は次の形になります。
for (行のループ)
{
for (列のループ)
{
配列[行][列]を処理
}
}次のような動きになります。
行0 → 列0 列1 列2
行1 → 列0 列1 列2
行2 → 列0 列1 列2
このパターンを覚えておくと、次のようなプログラムが簡単に書けるようになります。
- 表形式のデータ処理
- ゲームのマップ管理
- 行列計算
- 画像処理
多次元配列はC言語の中でも実務でもよく使われる重要なデータ構造です。
1次元配列の延長として理解すれば難しくありませんので、実際にプログラムを書きながら少しずつ慣れていきましょう。
