【C言語入門】2次元配列をマスターしよう!表やグリッド形式のデータ扱いの基本

C言語の配列を学習すると、次に登場するのが2次元配列です。1次元の配列が「一列に並んだリスト」だとすれば、2次元配列は**「縦横に広がる表(テーブル)やグリッド」**とイメージすると分かりやすいでしょう。

エクセルのシートや、ゲームのマップ、座席表など、身の回りにある多くのデータは、この2次元の表形式で表現できます。この記事では、2次元配列の基本的な作り方と使い方を、初心者にも分かりやすく解説します。


目次

2次元配列の作り方(宣言と初期化)

2次元配列は、**「配列の配列」**として定義されます。

基本構文: データ型 配列名[行数][列数];

  • 行数 (Rows): 配列の縦方向の長さ
  • 列数 (Columns): 配列の横方向の長さ

例えば、3人の生徒の、4科目分のテストの点数を格納する表は、次のように宣言できます。

// 3行 x 4列 の整数型2次元配列
int student_scores[3][4];

宣言と同時に初期値を設定する場合は、{}を入れ子にして記述します。

int student_scores[3][4] = {
    {82, 75, 90, 88},  // 1人目の生徒の点数 (0行目)
    {95, 88, 85, 92},  // 2人目の生徒の点数 (1行目)
    {76, 81, 79, 85}   // 3人目の生徒の点数 (2行目)
};

2次元配列の要素へのアクセス

2次元配列の特定の要素にアクセスするには、行と列、2つのインデックス(添え字)を指定します。インデックスは0から始まることに注意してください。

配列名[行のインデックス][列のインデックス]

例えば、student_scores配列から「2人目の生徒(1行目)の、3科目目の点数(2列目)」を取得するには、以下のように書きます。

int score = student_scores[1][2]; // 85 が取得される

同様に、値を代入することもできます。

C

// 3人目の生徒(2行目)の、4科目目の点数(3列目)を100点に更新
student_scores[2][3] = 100;

2次元配列の全ての要素を操作する(繰り返し処理)

2次元配列の全ての要素を順番に処理するには、for文を2重にした入れ子(ネスト)ループを使うのが一般的です。

  • 外側のループを制御する
  • 内側のループを制御する

サンプルコード

先ほどの生徒の点数データを、表形式で綺麗に出力するプログラムを見てみましょう。

#include <stdio.h>

int main(void) {
    int student_scores[3][4] = {
        {82, 75, 90, 88},
        {95, 88, 85, 92},
        {76, 81, 79, 85}
    };

    // 外側のループ (jが行を0→1→2と変化)
    for (int j = 0; j < 3; j++) {
        printf("生徒%d: ", j + 1);
        
        // 内側のループ (iが列を0→1→2→3と変化)
        for (int i = 0; i < 4; i++) {
            // %4d で、4桁分の幅を確保して右詰めで表示
            printf("%4d", student_scores[j][i]);
        }
        
        printf("\n"); // 1行分の表示が終わったら改行
    }

    return 0;
}

実行結果:

生徒1:   82  75  90  88
生徒2:   95  88  85  92
生徒3:   76  81  79  85

このように、入れ子ループを使うことで、2次元配列のデータを体系的に扱うことができます。


3次元以上の配列について

C言語では、3次元、4次元…と、さらに次元の多い配列(多次元配列)を作ることも可能です。

3次元配列の宣言: データ型 配列名[奥行き][行数][列数];

3次元配列は「表の集まり」や「立方体」のイメージです。例えば、school_data[クラス数][生徒数][科目数] のように使えます。

ただし、3次元以上になるとプログラムが複雑になり、管理が難しくなるため、実際のプログラミングでは構造体を使うなど、他の方法が選ばれることも多くあります。


まとめ

  • 2次元配列は、**表(テーブル)**形式のデータを扱うのに非常に便利。
  • 配列名[行数][列数] のように宣言し、配列名[行インデックス][列インデックス]で要素にアクセスする。
  • 全ての要素を処理するには、入れ子になった for ループを使うのが定石。

2次元配列を使いこなせると、C言語で扱えるデータの幅がぐっと広がります。まずは簡単な表を作成し、データを表示するプログラムから試してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次