構造体とは、複数のデータを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
構造体型変数の代入
構造体型変数は、同じ構造体であれば代入可能です。異なる構造体型の変数に代入した場合はコンパイルエラーとなります。
異なる構造体型の変数にメンバを代入したい場合は、メンバ毎に代入する必要があります。