天国にいけるC言語入門 ヘキサ構造体 ver2.2126
main関数内で定義された構造体の配列に格納された2人のキャラクターのステータスデータを構造体の配列のアドレスを自作関数の引数であるポインタ変数に参照渡しして同時に2倍にしてみます。
main関数内で定義された構造体の配列に格納された2人のキャラクターのステータスデータを構造体の配列のアドレスを自作関数の引数であるポインタ変数に参照渡しして同時に2倍にしてみます。
アレサ
「あるキャラクター
character1のステータスデータ
HP=10
MP=12
AP=20
DP=15
を
次のプログラムのように🌷構造体型の配列🌷を使い
2倍にすることができました
#include <stdio.h>
typedef struct CharacterStatusData
{
int HP;
int MP;
int AP;
int TP;
}CharacterStatusData;
void CharacterStatusData2bai(CharacterStatusData* pta){
pta->HP=2*pta->HP;
pta->MP=2*pta->MP;
pta->AP=2*pta->AP;
pta->TP=2*pta->TP;
printf("%d\n" ,pta->HP);
printf("%d\n" ,pta->MP);
printf("%d\n" ,pta->AP);
printf("%d\n" ,pta->TP);
}
int main(void)
{
CharacterStatusData str[1]={10,12,20,15};
printf("%d\n" ,str[0].HP);
printf("%d\n" ,str[0].MP);
printf("%d\n" ,str[0].AP);
printf("%d\n" ,str[0].TP);
CharacterStatusData2bai(&str[0]);
printf("%d\n" ,str[0].HP);
printf("%d\n" ,str[0].MP);
printf("%d\n" ,str[0].AP);
printf("%d\n" ,str[0].TP);
return 0;
}
コンパイル結果
10
12
20
15
20
24
40
30
20
24
40
30
ソーラー「
配列変数str[0]のメンバ変数
str[0].HP
str[0].MP
str[0].AP
str[0].TP
のアドレスを代表する
&str[0]を
自作関数の引数となっているCharacterStatusData*型のポインタ変数ptaに渡したんだね。」
アレサ
「では
あるキャラクター
character1のステータスデータ
HP=10
MP=12
AP=20
DP=15
と
もう1つ 別のキャラクターである
character2のステータスデータ
HP=100
MP=120
AP=38
DP=25
を
main関数内で定義された🌷構造体型の配列🌷に格納し
自作関数をつかって
2倍にしてみます。
その場合は
構造体型の配列宣言
CharacterStatusData str[2];
を行うことにより
配列変数str[0]のメンバ変数
str[0].HP
str[0].MP
str[0].AP
str[0].TP
配列変数str[1]のメンバ変数
str[1].HP
str[1].MP
str[1].AP
str[1].TP
を作製し
character1
character2のステータスデータ
10
12
20
15
100
120
38
25
を
str[0].HP=10
str[0].MP=12
str[0].AP=20
str[0].TP=15
str[1].HP=100
str[1].MP=120
str[1].AP=38
str[1].TP=25
と
配列変数str[0]
配列変数str[1]
のメンバ変数に格納していきます
さあ、いよいよ
この構造体型の配列に格納された
character1
character2
のステータスデータ
10
12
20
15
100
120
38
25
を2倍にしてみましょう(^_^)/💖
プログラムを以下のように構成します
#include <stdio.h>
typedef struct CharacterStatusData
{
int HP;
int MP;
int AP;
int TP;
}CharacterStatusData;
void CharacterStatusData2bai(CharacterStatusData*pta){
pta->HP=2*pta->HP;
pta->MP=2*pta->MP;
pta->AP=2*pta->AP;
pta->TP=2*pta->TP;
}
int main(void)
{
CharacterStatusData str[2]={{10,12,20,15},{100,120,38,25}};
printf("%d\n" ,str[0].HP);
printf("%d\n" ,str[0].MP);
printf("%d\n" ,str[0].AP);
printf("%d\n" ,str[0].TP);
printf("%d\n" ,str[1].HP);
printf("%d\n" ,str[1].MP);
printf("%d\n" ,str[1].AP);
printf("%d\n" ,str[1].TP);
CharacterStatusData2bai(&str[0]);
printf("%d\n" ,str[0].HP);
printf("%d\n" ,str[0].MP);
printf("%d\n" ,str[0].AP);
printf("%d\n" ,str[0].TP);
CharacterStatusData2bai(&str[1]);
printf("%d\n" ,str[1].HP);
printf("%d\n" ,str[1].MP);
printf("%d\n" ,str[1].AP);
printf("%d\n" ,str[1].TP);
return 0;
}
コンパイル結果
10
12
20
15
100
120
38
25
20
24
40
30
200
240
76
50
アレサ「
構造体型の配列に格納されている
character1のステータスデータ
HP=10
MP=12
AP=20
DP=15
と
character2のステータスデータ
HP=100
MP=120
AP=38
DP=25
を自作関数CharacterStatusData2baiをつかい2倍にすることができました」
🌞 🌞 🌞
あたりには
青空が広がっています
ソーラー「順調だね
main関数内で生成された構造体型の配列に格納された
character1
character2
のステータスデータ
2つのキャラクターのステータスデータも
2倍にすることができたんだね。」
アレサ「さらに今のプログラムは
for文を用いて
CharacterStatusData2bai(&str[0]);
printf("%d\n" ,str[0].HP);
printf("%d\n" ,str[0].MP);
printf("%d\n" ,str[0].AP);
printf("%d\n" ,str[0].TP);
CharacterStatusData2bai(&str[1]);
printf("%d\n" ,str[1].HP);
printf("%d\n" ,str[1].MP);
printf("%d\n" ,str[1].AP);
printf("%d\n" ,str[1].TP);
の部分を
int i;
for(i=0;i<2;i++){
CharacterStatusData2bai(&str[i]);
printf("%d\n" ,str[i].HP);
printf("%d\n" ,str[i].MP);
printf("%d\n" ,str[i].AP);
printf("%d\n" ,str[i].TP);
}
のようにまとめて
次のプログラムのように書き換えることができます
#include <stdio.h>
typedef struct CharacterStatusData
{
int HP;
int MP;
int AP;
int TP;
}CharacterStatusData;
void CharacterStatusData2bai(CharacterStatusData* pta){
pta->HP=2*pta->HP;
pta->MP=2*pta->MP;
pta->AP=2*pta->AP;
pta->TP=2*pta->TP;
}
int main(void)
{
CharacterStatusData str[2]={{10,12,20,15},{100,120,38,25}};
printf("%d\n" ,str[0].HP);
printf("%d\n" ,str[0].MP);
printf("%d\n" ,str[0].AP);
printf("%d\n" ,str[0].TP);
printf("%d\n" ,str[1].HP);
printf("%d\n" ,str[1].MP);
printf("%d\n" ,str[1].AP);
printf("%d\n" ,str[1].TP);
int i;
for(i=0;i<2;i++){
CharacterStatusData2bai(&str[i]);
printf("%d\n" ,str[i].HP);
printf("%d\n" ,str[i].MP);
printf("%d\n" ,str[i].AP);
printf("%d\n" ,str[i].TP);
}
return 0;
}
ビルド実行結果
10
12
20
15
100
120
38
25
20
24
40
30
200
240
76
50
ソーラー「構造体型の配列の本領を発揮してきたね」
アレサ「良い結果が出てきましたですの(*´▽`*)」
ソーラー「構造体型の配列でなく
構造体の構造体変数を使った場合では
for文を使ってまとめることはできないね
main関数内で定義された構造体の構造体変数に格納された
character1
10
8
22
18
character2
7
28
12
30
のステータスデータを2倍にするプログラムは
次のようだったね。
#include <stdio.h>
typedef struct CharacterStatusData
{
int HP;
int MP;
int AP;
int TP;
}CharacterStatusData;
void CharacterStatusData2bai(CharacterStatusData*pta){
pta->HP=2*pta->HP;
pta->MP=2*pta->MP;
pta->AP=2*pta->AP;
pta->TP=2*pta->TP;
}
int main(void)
{
CharacterStatusData charcter1StatusData={10,8,22,18};
CharacterStatusData charcter2StatusData={7,28,12,30};
printf("%d\n" ,charcter1StatusData.HP);
printf("%d\n" ,charcter1StatusData.MP);
printf("%d\n" ,charcter1StatusData.AP);
printf("%d\n" ,charcter1StatusData.TP);
printf("%d\n" ,charcter2StatusData.HP);
printf("%d\n" ,charcter2StatusData.MP);
printf("%d\n" ,charcter2StatusData.AP);
printf("%d\n" ,charcter2StatusData.TP);
CharacterStatusData2bai(&charcter1StatusData);
CharacterStatusData2bai(&charcter2StatusData);
printf("%d\n" ,charcter1StatusData.HP);
printf("%d\n" ,charcter1StatusData.MP);
printf("%d\n" ,charcter1StatusData.AP);
printf("%d\n" ,charcter1StatusData.TP);
printf("%d\n" ,charcter2StatusData.HP);
printf("%d\n" ,charcter2StatusData.MP);
printf("%d\n" ,charcter2StatusData.AP);
printf("%d\n" ,charcter2StatusData.TP);
return 0;
}
コンパイル結果
10
8
22
18
7
28
12
30
20
16
44
36
14
56
24
60
ソーラー「ここで
printf("%d\n" ,charcter1StatusData.HP);
printf("%d\n" ,charcter1StatusData.MP);
printf("%d\n" ,charcter1StatusData.AP);
printf("%d\n" ,charcter1StatusData.TP);
printf("%d\n" ,charcter2StatusData.HP);
printf("%d\n" ,charcter2StatusData.MP);
printf("%d\n" ,charcter2StatusData.AP);
printf("%d\n" ,charcter2StatusData.TP);
を
for文を使ってまとめることはできないね。
構造体型の配列に複数のキャラクターのステータスデータを格納するのは
このような利点があるんだね😊」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます