演習課題「構造体へのポインタを使って関数を作成しよう」
右のコードエリアには、4 人の冒険者が魔王を攻撃するプログラムが用意されています。
攻撃メッセージを出力する部分は完成していますが、MP を消費する処理が実装できていません。
attack 関数の処理を記述して、攻撃すると MP が 5 だけ減るようにしてください。
期待する出力値
冒険者は魔王を攻撃した!
残りのMP : 115
ウィザードは魔王を攻撃した!
残りのMP : 544
クルセイダーは魔王を攻撃した!
残りのMP : 45
プリーストは魔王を攻撃した!
残りのMP : 475
#06:構造体とポインタ
ポインタを使って構造体を操作する方法について学習します。
構造体へのポインタは、int へのポインタや char へのポインタと同じように宣言できます。(データ型名) *(変数名)
このチャプターでは、次のようにしてポインタ p を宣言しました。#include <stdio.h>
typedef struct {
char name[20];
int hp;
int power;
} Player;
int main(void)
{
Player hero = {"勇者", 100, 100};
Player *p = &hero; // ポインタの宣言と代入をおこなう
}
構造体へのポインタを使ってメンバを書き換えるには、次のように記述します。(*p).hp = 200;
これは、「アロー演算子」を使って以下のように書くことができます。p->hp = 200;
○ アロー演算子を見慣れないうちは、わかりやすい方で書いてみるのがおすすめです。
このチャプターで作成したコードです。// 構造体とポインタ
#include <stdio.h>
typedef struct {
char name[20];
int hp;
int power;
} Player;
void heal(Player *player)
{
player->hp += 100;
// (*player).hp += 100;
}
int main(void)
{
Player hero = {"勇者", 100, 100};
printf("%sのHPは%dです\n", hero.name, hero.hp);
heal(&hero);
heal(&hero);
printf("%sのHPは%dです\n", hero.name, hero.hp);
}
構造体とポインタ - 超初心者向けプログラミング入門
https://programming.pc-note.net/c/struct3.html