【C++/C言語】構造体の配列の使い方 | 複数のレコードをまとめて管理する方法

目次

はじめに

C++やC言語の構造体(struct)は、関連するデータを一つにまとめるのに便利ですが、その真価は配列と組み合わせることでさらに発揮されます。

「社員」の構造体を定義した後、その構造体をデータ型とする配列を宣言すれば、「全社員のデータ」を一つの変数でスマートに管理できます。これは、データベースのテーブルのように、同じ構造を持つ複数のレコード(データの行)を扱う際に非常に強力です。

この記事では、構造体の配列を宣言し、各要素にデータを格納し、ループで処理するという、データ管理の基本となるテクニックを解説します。


構造体の配列のサンプルコード

このコードは、Student(生徒)という構造体を定義し、3人分の生徒情報を格納する配列を作成します。その後、forループを使って、配列に格納された全生徒の情報を順番に表示します。

完成コード

#include <iostream>
#include <string>

// 「生徒」構造体の定義
struct Student {
    int id;            // 学生番号
    std::string name;  // 氏名
    int grade;         // 学年
};

int main() {
    // 1. 構造体の配列を宣言 (3人分)
    Student classRoster[3];
    
    // 2. 配列の各要素(構造体)のメンバに値を代入
    // 1人目のデータ (インデックス 0)
    classRoster[0].id = 101;
    classRoster[0].name = "鈴木 一郎";
    classRoster[0].grade = 2;

    // 2人目のデータ (インデックス 1)
    classRoster[1].id = 102;
    classRoster[1].name = "佐藤 花子";
    classRoster[1].grade = 2;

    // 3人目のデータ (インデックス 2)
    classRoster[2].id = 103;
    classRoster[2].name = "高橋 健太";
    classRoster[2].grade = 1;

    // 3. ループで配列の全要素を表示
    std::cout << "--- 生徒名簿 ---" << std::endl;
    for (int i = 0; i < 3; i++) {
        std::cout << "学生番号: " << classRoster[i].id
                  << ", 氏名: " << classRoster[i].name
                  << ", 学年: " << classRoster[i].grade << std::endl;
    }

    return 0;
}

実行結果

--- 生徒名簿 ---
学生番号: 101, 氏名: 鈴木 一郎, 学年: 2
学生番号: 102, 氏名: 佐藤 花子, 学年: 2
学生番号: 103, 氏名: 高橋 健太, 学年: 1

コードの解説

Student classRoster[3];

これが、構造体の配列を宣言している部分です。

  • Student: 自作した構造体(データ型)の名前です。
  • classRoster: 配列の変数名です。
  • [3]: 配列の要素数を指定しています。これにより、Student 型のデータを3つ格納できる配列が作成されます(インデックスは 0, 1, 2)。

classRoster[0].id = 101;

構造体の配列のメンバにアクセスするには、まず角括弧 []配列のインデックスを指定し、次にドット .構造体のメンバを指定します。

変数名[インデックス番号].メンバ名

この構文で、「配列の何番目の、どのメンバか」を正確に指定できます。

for (int i = 0; i < 3; i++) { ... }

構造体の配列は、for ループと非常に相性が良いです。ループカウンタ変数 i を配列のインデックスとして使うことで、classRoster[i] のように、配列の全要素に対して順番に同じ処理(この場合は表示処理)を効率的に行うことができます。


まとめ

今回は、構造体の配列を使って、複数のレコードデータをまとめて管理する方法を解説しました。

  • 構造体名 変数名[要素数]; のように、通常の配列と同じように宣言できる。
  • 各要素のメンバには、変数名[インデックス].メンバ名 のようにアクセスする。
  • for ループと組み合わせることで、大量のレコードデータを効率的に扱える。

この「構造体の配列」は、C++やC言語におけるデータ管理の基本形です。CSVファイルから読み込んだデータを格納したり、データベースのテーブルを模倣したりと、あらゆる場面で応用できる非常に重要なテクニックです。

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

この記事を書いた人

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

目次