ちょっとおまけ 自作関数の引数となっているポインタ変数に複数の構造体変数のアドレスが代入される様子を観察してみましょう

ソーラー「次のプログラムのどこがおもしろい点なのか?


それは・・・」


#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};


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;

}


コンパイル結果

20

16

44

36

14

56

24

60


アレサ「実はいたって普通のプログラムなんですの。」


ソーラー「そうなんです(#^^#)


ただ

CharacterStatusData2bai(&charcter1StatusData);

CharacterStatusData2bai(&charcter2StatusData);


をみて あれっつと思った人もいるんじゃないかなって


思ったんだ


自作関数CharacterStatusData2baiの引数であるポインタ変数ptaに


&charcter1StatusDataにつづいて

&charcter2StatusDataが代入されているので


このプログラム


CharacterStatusData2bai(&charcter2StatusData);


だけが有効になると思った人が


いるんじゃないかなっておもったんだよ~


CharacterStatusData2bai(&charcter1StatusData);


が実行された時点で


アドレス&charcter1StatusDataに格納されている数値は


2倍になっているんだ


そのあと


CharacterStatusData2bai(&charcter2StatusData);


により


アドレス&charcter2StatusDataに格納されている数値は


2倍になっているんだね。


だから


アドレス&charcter1StatusDataに格納されている数値も

アドレス&charcter2StatusDataに格納されている数値も

ちゃんと

2倍になっているんだね。

めでたし めでたしってわけなんだね(^_^)/」





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

作者を応援しよう!

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

応援したユーザー

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