C言語>構造体1
構造体は、一見難しそうに見えますが、実はそんなことはありません。
ゲームでは、各キャラの座標とかを保持しておくことができます。
ゲームでは、各キャラの座標とかを保持しておくことができます。
使用方法1
宣言方法
struct タグ名
{
メンバ変数1,
メンバ変数2,
};
実体宣言
struct タグ名 構造体変数;
使用方法2
struct タグ名
{
メンバ変数1,
メンバ変数2,
}構造体変数1, 構造体変数2, …;
初期化方法1
構造体変数.メンバ変数1 = 初期値; 構造体変数.メンバ変数2 = 初期値; …
初期化方法2
struct タグ名 構造体変数 =
{
メンバ変数1に対応する初期値,
メンバ変数2に対応する初期値,
…
};
メンバ変数とは
メンバ変数とは、構造体内で、宣言した変数の事をいいます。
ここで、注意したいのが、メンバ変数は変数宣言と同時に、
初期化ができないということです。
例えば、aという変数を宣言する例を見てみましょう。
普通は、
ここで、注意したいのが、メンバ変数は変数宣言と同時に、
初期化ができないということです。
例えば、aという変数を宣言する例を見てみましょう。
普通は、
int a = 0;
のように宣言と同時に初期化できますが、メンバ変数では、
struct タグ名
{
int a = 0;//エラー
};
のようにできないということです。
なので、初期化するには、外部で初期化する必要があります。
なので、初期化するには、外部で初期化する必要があります。
例文
//================================================
//include
//================================================
#include <stdio.h>
//================================================
//define
//================================================
#define PLAYER_ATTACK 5
#define PLAYER_DEFENCE 4
#define PLAYER_HP 4
//================================================
//struct
//================================================
struct CharaData
{
int attack;//攻撃力
int defence;//防御力
int Hp;//体力
char *name;//名前
};
//================================================
//メイン関数
//================================================
int main(void)
{
struct CharaData player;
//struct CharaData player =
//{
// PLAYER_ATTACK,
// PLAYER_DEFENCE,
// PLAYER_HP,
// "勇者"
//};
//という風に初期化することも出来ます。
/*初期化*/
player.attack = PLAYER_ATTACK;
player.defence = PLAYER_DEFENCE;
player.Hp = PLAYER_HP;
player.name = "勇者";
[[printf]]("%sのステータス", player.name);
printf("Hp:%d", player.Hp);
printf("attack:%d", player.attack);
printf("defence:%d", player.defence);
return 0;
}
実行結果

解説
struct CharaData
{
int attack;//攻撃力
int defence;//防御力
int Hp;//体力
char *name;//名前
};
CharaDataという構造体の宣言をしています。
struct CharaData player;
playerという構造体変数を実体化しています。
player.attack = PLAYER_ATTACK;
構造体内の変数を使う場合は、最初に宣言した構造体変数を書き、
.(ドット)で区切って、メンバ変数にアクセスしています。
この場合、CharaData構造体内のattack変数を使いますよ、
という意味になります。
.(ドット)で区切って、メンバ変数にアクセスしています。
この場合、CharaData構造体内のattack変数を使いますよ、
という意味になります。
<C言語に戻る
添付ファイル