【C++/C言語】構造体のメンバに「構造体の配列」を持たせる方法

目次

はじめに

C++やC言語の構造体(struct)は、入れ子(ネスト)にすることで複雑なデータ構造を表現できます。その応用として、構造体のメンバとして、別の構造体の「配列」を持つことも可能です。

これにより、「クラス」が「生徒の配列」を持つ、「部署」が「社員の配列」を持つ、といった、現実世界における「1対多」の包含関係を、プログラムの中で綺麗に表現することができます。

この記事では、構造体のメン-バとして構造体の配列を定義し、その配列の各要素のメンバにアクセスする方法を、分かりやすく解説します。


構造体の配列をメンバにするサンプルコード

このコードは、まず Player(選手)という基本的な構造体を定義します。次に、その Player配列をメンバとして持つ Team(チーム)という、より大きな構造体を定義します。

完成コード

#include <iostream>
#include <string>
#include <vector> // C++で推奨される動的配列 (std::vector) を使う場合

// 「選手」構造体の定義
struct Player {
    int jerseyNumber;   // 背番号
    std::string name;   // 選手名
};

// 「チーム」構造体の定義
struct Team {
    std::string teamName;   // チーム名
    Player players[3];      // 選手リスト(Player型の配列をメンバとして持つ)
};

int main() {
    // 1. 「チーム」構造体の変数を作成
    Team myTeam;
    
    // 2. チーム名を設定
    myTeam.teamName = "イーグルス";

    // 3. チーム内の選手配列の各要素にデータを設定
    // 1人目の選手 (インデックス 0)
    myTeam.players[0].jerseyNumber = 10;
    myTeam.players[0].name = "佐藤";

    // 2人目の選手 (インデックス 1)
    myTeam.players[1].jerseyNumber = 7;
    myTeam.players[1].name = "鈴木";

    // 3人目の選手 (インデックス 2)
    myTeam.players[2].jerseyNumber = 4;
    myTeam.players[2].name = "高橋";


    // 4. 設定した値をループで表示して確認
    std::cout << "チーム名: " << myTeam.teamName << std::endl;
    std::cout << "--- 選手一覧 ---" << std::endl;
    for (int i = 0; i < 3; i++) {
        std::cout << "背番号: " << myTeam.players[i].jerseyNumber
                  << ", 名前: " << myTeam.players[i].name << std::endl;
    }

    return 0;
}

実行結果

チーム名: イーグルス
--- 選手一覧 ---
背番号: 10, 名前: 佐藤
背番号: 7, 名前: 鈴木
背番号: 4, 名前: 高橋

コードの解説

struct Team { ... Player players[3]; ... };

Team 構造体の定義の中で、Player players[3]; という行が、Player 型の配列をメンバとして宣言している部分です。これにより、Team 型の変数は、3人分の Player データを格納できる領域を持つことになります。

myTeam.players[0].jerseyNumber = 10;

入れ子になった構造体の配列のメンバにアクセスするための構文です。左から右へ順に解釈します。

  1. myTeam: Team 型の変数 myTeam にアクセスします。
  2. .players: その中の players というメンバ(Player 型の配列)にアクセスします。
  3. [0]: players 配列の、インデックス 0 番目(最初)の要素にアクセスします。この要素は Player 型の構造体です。
  4. .jerseyNumber: 最後に、その Player 構造体の jerseyNumber というメンバにアクセスし、値を代入しています。

変数名.配列メンバ名[インデックス].メンバ名 という構文で、目的のデータに正確にアクセスできます。


まとめ

今回は、構造体のメンバとして「構造体の配列」を定義し、その要素にアクセスする方法を解説しました。

  • 構造体のメンバとして、**別の構造体型の「配列」**を定義できる。
  • 入れ子になった配列の要素のメンバには、変数名.配列名[インデックス].メンバ名 のようにアクセスする。

このテクニックは、1つのまとまりが、複数の同じ種類のデータを持つような、現実世界の複雑な関係性をモデル化する際に非常に強力です。例えば、1つの「注文」が複数の「注文明細」を持つ、といったデータ構造を綺麗に表現できます。

副業から独立まで「稼げる」Webスキルを習得する(PR)

ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。

「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。

このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。

講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。

副業に特化した強み

  • 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
  • AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
  • 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。

受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。

受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。

ブログで稼ぎたいなら「メイカラ」

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

この記事を書いた人

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

目次