構造体

構造体とは、複数のデータを1つにまとめたデータ型のことです。関連のあるデータを1つの型にすることで、データが扱いやすくなります。

構造体の宣言

構造体の宣言は以下の形式で行います。

struct 構造体タグ名{
	型 メンバ名;
	型 メンバ名;
};

タグ名は複数のデータを1つにまとめたときの、新しい型(構造体)の名前です。全て大文字で定義することが多いです。

メンバ名は構造体に属するデータです。いくつでも定義することができます。

構造体型の変数の宣言

構造体型の変数の宣言は2通りあります。以下の形式で行います。

// 構造体型変数の宣言①
struct 構造体タグ名{
	型 メンバ名;
	型 メンバ名;
}変数名;

// 構造体型変数の宣言②
struct 構造体タグ名 変数名;

メンバの初期化

構造体型の変数の初期化は、中括弧{}の中に、メンバ毎の初期値を記述し、カンマ(,)で区切ります。例を以下に示します。

struct 構造体タグ名{
	型 メンバ名;
	型 メンバ名;
};

// メンバの初期化
struct 構造体タグ名 変数名 = {メンバ1の初期値, メンバ2の初期値};

メンバへのアクセス

構造体型変数のメンバへのアクセスはドット(.)またはアロー(->)を使用します。基本的にはドットを使用しますが、メンバがポインタでポインタが指す値をアクセスするときにアローを使用します。ポインタについては別の章で解説します。

実際に書いて動かしてみましょう。

#include <stdio.h>

struct STATUS{
	char name[20];
	int  hp;
	int  mp;
	int  attack;
	int  defense;
	int  speed;
};

struct STATUS monster = {"スライム", 8, 0, 9, 5, 4};

int main(void)
{
	printf("名前\t:%s\n", monster.name);
	printf("HP\t:%d\n", monster.hp);
	printf("MP\t:%d\n", monster.mp);
	printf("攻撃力\t:%d\n", monster.attack);
	printf("防御力\t:%d\n", monster.defense);
	printf("素早さ\t:%d\n\n", monster.speed);

	return 0;
}

実行結果:

名前 :スライム
HP :8
MP :0
攻撃力 :9
防御力 :5
素早さ :4

構造体型変数の代入

構造体型変数は、同じ構造体であれば代入可能です。異なる構造体型の変数に代入した場合はコンパイルエラーとなります。

異なる構造体型の変数にメンバを代入したい場合は、メンバ毎に代入する必要があります。


<<前へ(基本型)

>>次へ(配列)