main関数内で定義された構造体の配列のアドレスを自作関数の引数となっているポインタ変数にポインタ渡ししてmain関数内で定義された構造体の配列に格納されている数値データを変更してみたいと思います。

アレサ「残念ながら このエピソードのタイトル


main関数内で定義された構造体の配列のアドレスを

自作関数の引数となっているポインタ変数にポインタ渡しした後

自作関数を使って

main関数内で定義された構造体の配列に格納されている数値データを

変更してみたいと思います


この文章の意味はとっても簡単ですの」


ソーラー「そうなんです


ようは


変数aに

a=1と格納されている数値を

a=2に変更してみようといってるのと同じなんだよ~🌞」


アレサ「すこし おさらいしてみます



main関数内で定義された変数aのアドレスを

自作関数の引数となっているポインタ変数にポインタ渡ししたのち

自作関数を使い

その変数aのアドレスのある場所に格納されている数値に変更を加えることによって

main関数内で定義された変数aに格納されている数値データ

を変更しました


この文章の意味を考えてみます(´▽`*)」


ソーラー「この文章の意味もとても簡単😊簡単😊


これは そのまま


        🌞  🌞  🌞

変数aに

a=1と格納されている数値を

a=2に変更しましたといってるのと同じなんです


        🌞  🌞  🌞



アレサ「そうなんです😊


a=1から

a=6と


a=3から

a=8と


いう具合にです


HP=a;と命令文が記述されていれば


a=1から

a=6への変化に伴い


ゲームキャラクターのHPを1から6に変更できたことになります。」


アレサ「次は



main関数内で定義された配列のアドレスを

自作関数の引数となっているポインタ変数にポインタ渡ししたのち

自作関数を使い

その配列のアドレスのある場所に格納されている数値に変更を加えることによって

main関数内で定義された配列に格納されている数値データを

変更しました


この文章の意味を考えてみます」


ソーラー「

この場合も


単に😊

main関数内で定義された配列に

格納されている数値を変更したというだけのことなんだね」


アレサ「はい そうですの


具体的には


配列宣言

int hairetu[2];

により生成された


配列hairetu内の配列変数


hairetu[0]

hairetu[1]に


hairetu[0]=1

hairetu[1]=2



格納されている数値を自作関数により


hairetu[0]=3

hairetu[1]=6


などのように変更することができました



HP=hairetu[0];

MP=hairetu[1];

命令文が記述されていれば


ゲームキャラクターのHP、MPなどを同時に変更できたことになります。


配列はint型なら


配列内の配列変数

hairetu[0]

hairetu[1]


には

整数値しか格納できません。


格納しようとするデータが


HP=10

MP=26

AP=3

DP=8

のように


int型の配列がつかえますね。」


アレサ「では次は・・・


main関数内で定義された構造体CharacterStatusData型の構造体変数character1StatusDataのアドレスを

自作関数の引数となっているポインタ変数にポインタ渡ししたのち

自作関数を使い

その構造体変数character1StatusDataのアドレスのメモリに格納されている数値に変更を加えることによって

main関数内で定義された構造体CharacterStatusDataの構造体変数character1StatusDataに格納されている数値データを変更してきました。

                               」


ソーラー「これも簡単


main関数内で定義された

構造体CharacterStatusData型の構造体変数character1StatusData


に格納されている数値を変更しただけなんだな


文章で書くと難しく見えるね」


アレサ「そのとおりですの


具体的には


構造体CharacterStatusData型の構造体変数character1StatusData


のメンバ変数である


character1StatusData.HP

character1StatusData.MP

character1StatusData.AP

character1StatusData.DP


に格納されているデータを


character1StatusData.HP=8

character1StatusData.MP=2

character1StatusData.AP=8

character1StatusData.DP=10


から

character1StatusData.HP=16

character1StatusData.MP=4

character1StatusData.AP=16

character1StatusData.DP=20


のように変更できました


ということなのです



HP=character1StatusData.HP;

MP=character1StatusData.MP;

AP=character1StatusData.AP;

DP=character1StatusData.DP;


と命令文が記述されていれば


ゲームキャラの


HP

MP

AP

DP

の値を

HP=8

MP=2

AP=8

DP=10

から

HP=16

MP=4

AP=16

DP=20


変更できたことになります


構造体を使えば


HP

MP

AP

DP


のデータを1つの構造体変数character1StatusData


で管理できるのがよいところですの。


例えば


構造体変数character1StatusDataのメンバ変数に

格納されている数値データ

HP=8

MP=2

AP=8

DP=10

代表して

構造体CharacterStatusData型の構造体変数character1StatusDataを


同じ構造体CharacterStatusData型の構造体変数character2StatusDataに


character2StatusData=character1StatusData;


と代入することにより


HP=8

MP=2

AP=8

DP=10

のデータを

構造体変数character2StatusDataに

あっさり渡すことができますの


ソーラー「そこっ(^_^)v そこなんだよね


以前のエピソードでもみたけど


配列同士では


配列hairetu1に格納されている数値データを


配列hairetu2に


hairetu2=hairetu1;


のように代入して格納されている数値データを


渡すことはできないんだよね


これが 構造体変数同士だと


character2StatusData=character1StatusData;



代入して

格納されている数値データをわたすことが可能なんだ


はは 構造体変数は変数だからかな?」


アレサ「また


配列とちがい


構造体では異なる型の変数をメンバ変数として格納できるため


HP=1

MP=2

AP=3.1434

DP=3.2456

のように

同時に

格納されているデータに整数と実数がまざっている場合には


配列でなく


    🌞int型とfloat型を併せ持つよう設定できる🌞 


構造体に数値データを格納することになるのですの。


そして


最後に登場するのが


今から試してみようとしている


main関数内で定義された構造体の配列のアドレスを

自作関数の引数となっているポインタ変数にポインタ渡ししたのち

自作関数を用いて

main関数内で定義された構造体の配列のアドレスのメモリに

格納されている数値データを変更して

main関数内で定義された構造体の配列に格納されている数値データを

変更してみよう

なのです

                               」


ソーラー「わおっ😝 むずかしそ~~


なことは全然ないんだね これも


ただ単に


構造体の配列


たとえば

構造体 CharacterStatusData 型の


typedef struct CharacterStatusData {

int HP;

int MP;

int AP;

int DP;

} CharacterStatusData


配列宣言


CharacterStatusData str[2]={{1,2,3,4},{5,6,7,8}};


が行われているなら


生成される配列変数

str[0].HP

str[0].MP

str[0].AP

str[0].TP

str[1].HP

str[1].MP

str[1].AP

str[1].TP


str[0].HP=1

str[0].MP=2

str[0].AP=3

str[0].TP=4

str[1].HP=5

str[1].MP=6

str[1].AP=7

str[1].TP=8


格納されている数値データを


自作関数を使って


str[0].HP=2

str[0].MP=4

str[0].AP=6

str[0].TP=8

str[1].HP=10

str[1].MP=12

str[1].AP=14

str[1].TP=16


のように変更してみようとするだけのことだね


character1HP=str[0].HP;

character1MP=str[0].MP;

character1AP=str[0].AP;

character1TP=str[0].TP;


character2HP=str[1].HP;

character2MP=str[1].MP;

character2AP=str[1].AP;

character2TP=str[1].TP;


と命令文が記述されていたなら

character1とcharacter2の4つのステータスデータを


同時に変更できたことになるわけだね。」


アレサ「はいっ😊


構造体をつかえば


前のエピソードでもみてきたように


一人のゲームキャラクターcharacter1


の4つのステータスデータ

HP

MP

AP

TP


を同時に変更できました



ですから



構造体の配列を

使えば


1度に複数のキャラクター

character1

character2

character3


の4つのステータスデータ

HP

MP

AP

TP

を同時に変更させることができるとおもわれますの」


ソーラー「それでは次のエピソードで


main関数内で定義された構造体の配列に格納されている 

複数のキャラクターの

数値データ

HP

MP

AP

TP

変更してみよっか(*^_^*)」




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

作者を応援しよう!

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

応援したユーザー

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