C言語入門|多次元配列の基礎

ここからは、配列の 応用編 に入っていきます。
テーマは 多次元配列 です。

「えっ、急に難しそう…」
そう感じたら、まずは安心してください 😊

最初は
「こういうものがあるんだな」
とイメージできれば十分です。

多次元配列は、普段の業務アプリではあまり出番がない一方で、
ゲーム、画像処理、科学技術計算などではとてもよく使われます。
C言語をしっかり使いこなすなら、避けては通れない話題です。

1次元配列と2次元配列の違い

これまで扱ってきた配列は、すべて 1次元配列 でした。

int data[5];

これは、横に一直線に並んだ箱をイメージできます。

添え字01234

ここに 縦の並び を追加すると、
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日目182220
2日目172119

プログラム中の

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点が分かれば十分です。

少しずつ、
配列の世界が立体的に見えてくる
そんな感覚を楽しんでいきましょう 😊