
C言語入門|多次元配列の基礎
ここからは、配列の 応用編 に入っていきます。
テーマは 多次元配列 です。
「えっ、急に難しそう…」
そう感じたら、まずは安心してください 😊
最初は
「こういうものがあるんだな」
とイメージできれば十分です。
多次元配列は、普段の業務アプリではあまり出番がない一方で、
ゲーム、画像処理、科学技術計算などではとてもよく使われます。
C言語をしっかり使いこなすなら、避けては通れない話題です。

1次元配列と2次元配列の違い
これまで扱ってきた配列は、すべて 1次元配列 でした。
int data[5];これは、横に一直線に並んだ箱をイメージできます。
| 添え字 | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| 値 |
ここに 縦の並び を追加すると、
2次元配列 になります。
2次元配列は、
行 × 列 で構成された「表」のような構造です。
| 列0 | 列1 | |
|---|---|---|
| 行0 | ||
| 行1 |
このように、
データを表形式で扱いたいときに、とても便利です。
多次元配列とは何か
2次元配列や3次元配列のように、
次元が2以上の配列 をまとめて 多次元配列 と呼びます。
| 次元 | 呼び方 | イメージ |
|---|---|---|
| 1次元 | 1次元配列 | 横一列 |
| 2次元 | 2次元配列 | 表(行×列) |
| 3次元以上 | 多次元配列 | 表の集合 |
業務アプリケーションでは出番が少なめですが、
数値計算やシミュレーションの世界では大活躍します。
2次元配列の宣言方法
2次元配列は、次の形で宣言します。
要素の型 配列変数名[行数][列数];たとえば、
2人分・3項目のデータを格納したい場合は、次のようになります。
int data[2][3];この宣言を言葉で説明すると、
- 行が2つ
- 列が3つ
- 各要素は int 型
という意味になります。
2次元配列の要素の使い方
2次元配列の要素にアクセスするには、
添え字を 2つ 書きます。
配列変数名[行の添え字][列の添え字]最初の [] が「行」、
次の [] が「列」を表します。
サンプルプログラムで確認してみよう
ここでは、元の兄弟のテスト点数とは内容を変えて、
2日分の3時間帯の気温データ を扱う例にしてみます。
プロジェクト名:7-6-1 ソースファイル名: sample7-6-1.c
#include <stdio.h>
int main(void)
{
int temps[2][3];
temps[0][0] = 18;
temps[0][1] = 22;
temps[0][2] = 20;
temps[1][0] = 17;
temps[1][1] = 21;
temps[1][2] = 19;
for (int day = 0; day < 2; day++) {
printf("%d日目の気温を表示します\n", day + 1);
for (int time = 0; time < 3; time++) {
printf("%d時台:%d度\n", time + 1, temps[day][time]);
}
}
return 0;
}プログラムの動きを整理してみよう
このプログラムでは、
for 文が2重 になっています。
| ループ | 役割 |
|---|---|
| 外側の for | 行(何日目か)を制御 |
| 内側の for | 列(時間帯)を制御 |
つまり、
- day が 0 → 1 と変化する
- その中で time が 0 → 1 → 2 と変化する
という流れで、
表を上から順に読み取っている わけです。
表でイメージする2次元配列
この 2次元配列 temps は、
次のような表として考えられます。
| 1時台 | 2時台 | 3時台 | |
|---|---|---|---|
| 1日目 | 18 | 22 | 20 |
| 2日目 | 17 | 21 | 19 |
プログラム中の
temps[1][2]は、
- 2日目
- 3時台
のデータ、つまり 19 を指しています。
配列変数の型に注意しよう
ここで、とても大切な確認ポイントです。
int temps[2][3];このとき、変数 temps の型は
- int 型
ではなく - int[2][3] 型
です。
2次元配列は、
配列そのものが配列型 であることを忘れないようにしましょう。
実はC言語に「2次元配列」は存在しない?
ちょっと不思議な話をします。
見た目は表のような2次元配列ですが、
コンピュータの中では、表の形で並んでいるわけではありません。

C言語の世界では、
- 1次元配列が
- 横に並んでいる
という構造になっています。
つまり、
int temps[2][3];は、
- int[3] 型の配列が2つ並んでいる
という構造です。
コンピュータ内部でのイメージ
イメージとしては、次のようになります。

表に見えても、
実体は 1次元配列の集合 です。
そのため、
- 3次元配列
- 4次元配列
であっても、
最終的には 1次元配列の積み重ね として扱われます。
まとめ:まずは「表」として理解しよう
多次元配列は、最初は少しとっつきにくく感じますが、
- 見た目は表
- 中身は配列の集合
と考えると、理解しやすくなります。
今の段階では、
- 宣言の形
- 添え字の意味
- for 文を2重に使う理由
この3点が分かれば十分です。
少しずつ、
配列の世界が立体的に見えてくる
そんな感覚を楽しんでいきましょう 😊
