構造体変数のメンバ変数となった他の構造体の構造体変数をもっと簡単に初期化してみましょう

アレサ

「前のエピソードのプログラムで構造体変数player1StatusDataのメンバ変数


player1StatusData.HP

player1StatusData.MP

player1StatusData.AP

player1StatusData.TP

および


構造体変数player1StatusDataのメンバ変数となった

構造体Allcleartimequest型の

構造体変数Allcleartimequest1のメンバ変数

player1StatusData. Allcleartimequest1.cleartimequest1

player1StatusData. Allcleartimequest1.cleartimequest2

player1StatusData. Allcleartimequest1.cleartimequest3

次のように数値を代入して初期化しました。


player1StatusData.HP=10;

player1StatusData.MP=8;

player1StatusData.AP=22;

player1StatusData.TP=18;

player1StatusData. Allcleartimequest1.cleartimequest1=150;

player1StatusData. Allcleartimequest1.cleartimequest2=7800;

player1StatusData. Allcleartimequest1.cleartimequest3=123800;


このようにメンバ変数に数値を代入して初期化する方法は長いとおもわれますの


🌳🌳🌲🌳🌳🌲🌳🌳🌲🌳🌳🌲🌳🌳🌲

前のエピソードのプログラムはこちら

↓ ↓ ↓

#include <stdio.h>


typedef struct Allcleartimequest

{

int cleartimequest1;

int cleartimequest2;

int cleartimequest3;

}Allcleartimequest;


typedef struct PlayerStatusData

{

int HP;

int MP;

int AP;

int TP;

Allcleartimequest Allcleartimequest1;

}PlayerStatusData;


int main(void){


PlayerStatusData player1StatusData;


player1StatusData.HP=10;

player1StatusData.MP=8;

player1StatusData.AP=22;

player1StatusData.TP=18;

player1StatusData. Allcleartimequest1.cleartimequest1=150;

player1StatusData. Allcleartimequest1.cleartimequest2=7800;

player1StatusData. Allcleartimequest1.cleartimequest3=123800;


printf("player1\n");

printf ("%d\n", player1StatusData.HP);

printf ("%d\n", player1StatusData.MP);

printf ("%d\n", player1StatusData.AP);

printf ("%d\n", player1StatusData.TP);

printf ("%d\n", player1StatusData.Allcleartimequest1.cleartimequest1);

printf ("%d\n", player1StatusData.Allcleartimequest1.cleartimequest2);

printf ("%d\n", player1StatusData.Allcleartimequest1.cleartimequest3);


return 0;

}

コンパイル結果

10

8

22

18

150

7800

123800

🌳🌳🌲🌳🌳🌲🌳🌳🌲🌳🌳🌲🌳🌳🌲


アレサ


「この構造体変数 player1StatusDataの初期化方法

player1StatusData.HP=10;

player1StatusData.MP=8;

player1StatusData.AP=22;

player1StatusData.TP=18;

player1StatusData. Allcleartimequest1.cleartimequest1=150;

player1StatusData. Allcleartimequest1.cleartimequest2=7800;

player1StatusData. Allcleartimequest1.cleartimequest3=123800;

を もっと簡単に


Player player1StatusData={10,8,22,18,{150,7800,123800}};とかきかえることができます。

↑  ↑  ↑

(この1文でplayer1StatusDataの構造体変数宣言を行い


player1StatusDataを構造体Playerの構造体変数にしたと同時に


数値データを構造体変数player1StatusDataに代入し


初期化もおこなっています。)


{10,8,22,18,{150,7800,123800}}内の


数値データ

10

8

22

18


構造体宣言 PlayerStatusData

⇩  ⇩  ⇩

typedef struct PlayerStatusData

{

int HP;

int MP;

int AP;

int TP;

Allcleartimequest Allcleartimequest1;

}Player;


内で表記された変数宣言


int HP;

int MP;

int AP;

int TP;

の順に上から


player1StatusDataのメンバ変数に


player1StatusData.HP=10;

player1StatusData.MP=8;

player1StatusData.AP=22;

player1StatusData.TP=18;


と代入されていきます。



そして残りの


{150,7800,123800}内の


数値データ 

150

7800

123800は


構造体宣言 Allcleartimequest

⇩  ⇩  ⇩

typedef struct Allcleartimequest

{

int cleartimequest1;

int cleartimequest2;

int cleartimequest3;

}Allcleartimequest ;


で表記された


int cleartimequest1;

int cleartimequest2;

int cleartimequest3;


の順に上から


構造体変数player1StatusDataのメンバ変数Allcleartimequest1

のメンバ変数

player1StatusData.Allcleartimequest1.cleartimequest1

player1StatusData.Allcleartimequest1.cleartimequest2

player1StatusData.Allcleartimequest1.cleartimequest3

player1StatusData.Allcleartimequest1.cleartimequest1=150;

player1StatusData.Allcleartimequest1.cleartimequest2=7800;

player1StatusData.Allcleartimequest1.cleartimequest3=123800;


と代入されていきます。


今のプログラムはシンプルにまとめると


以下のようにかきかえられます。


🌳🌳🌲🌳🌳🌲🌳🌳🌲🌳🌳🌲🌳🌳🌲

#include <stdio.h>


typedef struct Allcleartimequest

{

int cleartimequest1;

int cleartimequest2;

int cleartimequest3;

}Allcleartimequest ;



typedef struct PlayerStatusData

{

int HP;

int MP;

int AP;

int TP;

Allcleartimequest Allcleartimequest1;

}PlayerStatusData;


int main(void){


PlayerStatusData player1StatusData={10,8,22,18,{150,7800,123800}};

/*ここの部分がすっきりとしました🌞*/


printf("player1\n");

printf ("%d\n", player1StatusData.HP);

printf ("%d\n", player1StatusData.MP);

printf ("%d\n", player1StatusData.AP);

printf ("%d\n",player1StatusData.TP);

printf ("%d\n",player1StatusData.Allcleartimequest1.cleartimequest1);

printf ("%d\n",player1StatusData.Allcleartimequest1.cleartimequest2);

printf ("%d\n",player1StatusData.Allcleartimequest1.cleartimequest3);


return 0;

}


コンパイル結果

player1

10

8

22

18

150

7800

123800

🌳🌳🌲🌳🌳🌲🌳🌳🌲🌳🌳🌲🌳🌳🌲



ソーラー 「ははあ


構造体変数player1StatusDataの初期化で


PlayerStatusData player1StatusData={10,8,22,18,{150,7800,123800}};

の{}内でさらに{}に囲まれた


{150,7800,123800}のように


構造体変数の初期化で


{}内でさらに{}に囲まれた

数値データがあるときは


構造体に別の構造体変数がメンバ変数として格納されているんだね。」


アレサ「構造体変数の初期化は


player1StatusData.HP=10;

player1StatusData.MP=8;

player1StatusData.AP=22;

player1StatusData.TP=18;

player1StatusData.Allcleartimequest1.cleartimequest1=150;

player1StatusData.Allcleartimequest1.cleartimequest2=7800;

player1StatusData.Allcleartimequest1.cleartimequest3=123800;

のように


1つずつデータを構造体変数player1StatusDataのメンバ変数に格納するより


このように初期化した方が


簡単でいいと思います。」


  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます