Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語の構造体内で配列を使う方法をわかりやすく解説


C言語における「構造体内の配列」とは、異なるデータ型を持つ複数の変数を、ひとつの名前のもとにまとめて管理できる仕組みです。構造体の中に配列メンバーを定義することで、関連するデータを効率的かつ整理された形で扱うことができます。

構造体宣言の一般形式

構造体の宣言は、以下のように記述します。

struct tagname{
    datatype member1;
    datatype member2;
    datatype member n;
};

struct は、構造体を定義するためのキーワードです。

tagname は、構造体の名前(タグ名)を指定します。

member1、member2 などは、構造体を構成する各データ項目(メンバー)を表します。

例:構造体の定義

次の例は、C言語における構造体内での配列の基本的な使い方を示したものです。

struct book{
    int pages;
    char author [30];
    float price;
};

この例では、ページ数(int型)、著者名(char型の配列)、価格(float型)といった異なる型のデータを、「book」というひとつの構造体にまとめています。特に author のように文字配列をメンバーに持たせることで、文字列データも構造体の中で管理できます。

サンプルプログラム

続いて、構造体内に配列を含む実際のCプログラムを見てみましょう。

#include <stdio.h>
// candidate(受験者)構造体の宣言
struct candidate {
    int roll_no;
    char grade;
    // 構造体内の配列
    float marks[4];
};
// 構造体変数の内容を表示する関数
void display(struct candidate a1){
    printf("Roll number : %d\n", a1.roll_no);
    printf("Grade : %c\n", a1.grade);
    printf("Marks secured:\n");
    int i;
    int len = sizeof(a1.marks) / sizeof(float);
    // 構造体内の配列要素へのアクセス
    for (i = 0; i < len; i++) {
        printf("Subject %d : %.2f\n",
        i + 1, a1.marks[i]);
    }
}
// メイン関数
int main(){
    // 構造体の初期化
    struct candidate A= { 1, 'A', { 98.5, 77, 89, 78.5 } };
    // 表示用関数の呼び出し
    display(A);
    return 0;
}

実行結果

上記のプログラムをコンパイルして実行すると、次のような出力が得られます。

Roll number : 1
Grade : A
Marks secured:
Subject 1 : 98.50
Subject 2 : 77.00
Subject 3 : 89.00
Subject 4 : 78.50

プログラムのポイント解説

このプログラムでは、candidate 構造体の中に float 型の配列 marks[4] を定義しています。これにより、4科目分の点数をひとつの構造体変数だけで管理できます。

sizeof(a1.marks) / sizeof(float) という計算式を使うことで、配列の要素数を動的に求めており、forループによって全科目の点数を順番に表示しています。

また、main 関数内では { 1, 'A', { 98.5, 77, 89, 78.5 } } のように、入れ子になった初期化リストを使って構造体を初期化している点にも注目してください。このように構造体と配列を組み合わせることで、受験者情報のような複雑なデータを簡潔かつ体系的に扱うことが可能になります。

  1. C#のクラスとは?基本概念からコンストラクタまで徹底解説

    C#におけるクラスは、最も重要な型の一つです。クラスは、問題領域に関連するオブジェクトを生成するための「設計図」と考えることができます。つまり、クラスはテンプレートであり、そこからオブジェクトを作成します。クラスには、そのクラスから作られるオブジェクト群が共有する構造(データ)と振る舞い(メソッド)が定義されています。たとえるなら、クラスは「クッキーの型」であり、オブジェクトはその型で作られた「クッキー」そのものです。 カプセル化という重要な概念 クラスは、オブジェクト指向プログラミングにおける重要な概念である「カプセル化」を実現します。カプセル化とは、データと、そのデータを操作する処理を一箇

  2. JavaFXアプリケーションの基本構造を解説!Stage・Scene・Nodesの役割と関係

    一般的に、JavaFXアプリケーションは「Stage(ステージ)」「Scene(シーン)」「Nodes(ノード)」という3つの主要コンポーネントで構成されています。以下の図のように、それぞれが階層的に連携することでアプリケーションの画面が実現されます。Stage(ステージ)とはStageはウィンドウそのものを指し、JavaFXアプリケーションのすべてのオブジェクトを格納する最上位のコンテナです。Stageはパッケージjavafx.stageのStageクラスによって表現されます。なお、Stageの内容を画面に表示するには、show()メソッドを呼び出す必要があります。Scene Graph(シ