C言語 入門|構造体の初期化、代入などを解説!

C言語
スポンサーリンク

「構造体ってどうやって使うの?」

「構造体を使う意味って何?」

そんな疑問を持つ方に向けて、構造体の基礎内容を図や例題を使って紹介していきたいと思います!

スポンサーリンク

構造体とは

構造体とは、「色々な型のデータを集めて管理する型」のことを言います。

同じデータをまとめて扱うものとして、配列というものがありました。

配列の例を図で表してみると以下のようになります。

ここで注目して欲しいのが、それぞれの学生の成績を配列でまとめていますが、

「どの点数が誰の何の教科のものなのかは外側のラベル(配列では扱っていない内容)を知っている前提でまとめられている」という点です。

つまり、配列では一つの型(今回は整数)しかまとめることができません。

配列について知りたい方はこちら

そこでこの問題を解決するために使われるのが構造体なのです!!

構造体であれば、「student」という構造体を作ったとすると、一人一人の名前から成績までを、ひとまとまりにして取り扱うことができます。つまり、たくさんの型をまとめることができます!

注意

構造体は「int」や「char」などと同じ「型」です。

スポンサーリンク

構造体の宣言(初期化)

それでは構造体の宣言の仕方について解説していきます。

構造体は、以下で宣言することができます。

struct 構造体タグ名{

型名 メンバ名;

型名 メンバ名;

型名 メンバ名;

・・・

};

先ほどの例を使うと、このように書くことができます。

struct student {
    char name[100]; /* 名前 */
    int number; /* 学生番号 */
    int math;/* 数学の成績 */
};

メンバの初期化をする際は、このように書きます。

struct student tanaka={"田中",29};

構造体のオブジェクト名をtanakaとして、名前、学生番号と書いてあります。

数学の成績が書かれていませんが、もし書かれていない場合は配列と同じく「0」で初期化されることに注意しましょう。

例題を使って使い方を解説

まずは以下の例を実行してみましょう。

「それぞれの生徒のデータを構造体でまとめ、番号である生徒のデータを選んで画面に表示する」プログラムです。

#include <stdio.h>

#define BUFFER_SIZE (256)               /*文字列用サイズ*/
#define NUM (5)                         /*データ数*/

struct Profile {                        /*構造体*/
	int number;                           /*番号*/
	char name[BUFFER_SIZE];               /*名前*/
	int age;                              /*年齢*/
	double height;                        /*身長*/
	double weight;                        /*体重*/
        char specialskill[BUFFER_SIZE];       /*趣味*/
};

int main(void)
{

	int num;                              /*データの番号*/
	int s;
	/*=構造体変数の定義と初期化=*/
	struct Profile profile[NUM]={{0,"山田 太郎",20,172.0,69.0,"水泳"},
				     {1,"田中 二郎",21,160.0,63.0,"プログラミング"},
				     {2,"佐々木 花子",21,154.0,50.0,"卓球"},
				     {3,"近藤 美香",20,161.0,49.0,"ピアノ"},
				     {4,"太田 吾郎",22,166.0,56.0,"サッカー"}};

	/*=初期登録情報の出力=*/
	printf("出力する情報の番号:");    scanf("%d",&s);
        printf("現在の登録情報は\n");
		printf("番号: %d\n", profile[s].number);
		printf("名前: %s\n", profile[s].name);
		printf("年齢: %d\n", profile[s].age);
		printf("身長: %5.1f\n", profile[s].height);
		printf("体重: %4.1f\n", profile[s].weight);
                printf("趣味: %s\n",profile[s].specialskill);
		printf("\n");

	return 0;
}

構造体「Profile」を定義して番号や名前、年齢などの情報を一つのまとめることができています。

この構造体の変数名「profile」を定義して、初期化しています。

そして「=」を使ってデータを代入し、そのデータを使う場合には、「.」演算子を利用します。

「.」演算子

例:a.b 内容:構造体aのメンバbを表す。

この「.」演算子を使うことで、データをprintf内で扱うことができています。

まとめ

今回は様々な型を一つにまとめることができる構造体について解説しました。

配列では1つの型しか扱うことができませんが、構造体を使うことで多くの変数を必要とする複雑な処理をまとめて記述できるようになり、プログラムの開発作業の効率をあげることができます。

今回は基本的な構造体の内容を解説させていただきました。

C言語
スポンサーリンク
カンキリをフォローする
kankiriblog