C言語>ポインタ3
3回目は、構造体を使ってポインタを説明します。
例文
//================================================
//include
//================================================
#include <stdio.h>
//================================================
//define
//================================================
#define P_AT 4 //自分の攻撃力
#define P_DEF 2//自分の防御力
#define E_AT 2//敵の攻撃力
#define E_DEF 1//敵の防御力
//================================================
//struct
//================================================
struct tagChara
{
char *name;//名前
int attack;//攻撃力
int defence;//防御力
};
//================================================
//関数のプロトタイプ宣言
//================================================
void SetStatus(struct tagChara *chara, char *name, int attack, int defence);//ステータスのセット
void DispStatus(struct tagChara *chara);//ステータスの表示
//================================================
//メイン関数
//================================================
int main(void)
{
/*構造体変数の宣言*/
struct tagChara player;
struct tagChara enemy;
/*ステータスセット*/
SetStatus(&player, "勇者", P_AT, P_DEF);
SetStatus(&enemy, "モンスター", E_AT, E_DEF);
/*ステータスの表示*/
DispStatus(&player);
DispStatus(&enemy);
return 0;
}
//================================================
//ステータスセット
//================================================
void SetStatus(struct tagChara *chara, char *name, int attack, int defence)
{
chara->name = name;
chara->attack = attack;
chara->defence = defence;
}
//===============================================
//ステータスの表示
//===============================================
void DispStatus(struct tagChara *chara)
{
[[printf]]("%s:\t", chara->name);
printf("attack:%d\t", chara->attack);
printf("defence:%d\n", chara->defence);
}
実行結果
解説
void SetStatus(struct tagChara *chara, char *name, int attack, int defence);//ステータスのセット
構造体をポインタにして、関数のプロトタイプ宣言をしています。
SetStatus(&player, "勇者", P_AT, P_DEF);
ステータスの設定をしています。
SetStatusの最初の引数は、構造体のポインタのため、
&をつけています。
SetStatusの最初の引数は、構造体のポインタのため、
&をつけています。
では実際に、関数の中身を見て行きましょう。
chara->name = name; chara->attack = attack; chara->defence = defence;
構造体ポインタの変数に、引数として指定したもの
を代入しています。
構造体ポインタを代入するときは、上記の通り
を代入しています。
構造体ポインタを代入するときは、上記の通り
- >をつけるか、
(*chara).nameという風にします。
DispStatusも同じような感じです。
DispStatusも同じような感じです。
とりあえず、ポインタの回は以上です。
大変複雑で難しいですが、一度使い方さえ
抑えてしまえば、何とかなると思います。
大変複雑で難しいですが、一度使い方さえ
抑えてしまえば、何とかなると思います。
<C言語に戻る