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

てんC「残念ながら このエピソードのタイトル

👇

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

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

自作関数を使って

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

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


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


ソーラー「そうなんです


ようは


変数aに

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

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


てんC「すこし おさらいしてみます



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

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

自作関数を使い

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

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

を変更しました


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


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


これは そのまま


        🌞  🌞  🌞

変数aに

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

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


        🌞  🌞  🌞



てんC「そうなんです😊


a=1から

a=6と


a=3から

a=8と


いう具合にです


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


a=1から

a=6への変化に伴い


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


てんC「次は



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

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

自作関数を使い

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

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

変更しました


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


ソーラー「

この場合も


単に😊

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

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


てんC「はい そうですの


具体的には


配列宣言

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型の配列がつかえますね。」


てんC「では次は・・・


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

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

自作関数を使い

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

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

                               」


ソーラー「これも簡単


main関数内で定義された

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


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


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


てんC「ソーラーさん 冴えてる~


そのとおりです


具体的には


構造体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


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


例えば


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


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


character2StatusData=character1StatusData;


と代入するだけで


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


character1StatusData.HP

character1StatusData.MP

character1StatusData.AP

character1StatusData.DP


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

8

2

8

10


構造体変数character2StatusDataのメンバ変数


character2StatusData.HP

character2StatusData.MP

character2StatusData.AP

character2StatusData.DP


に代入することができます」



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


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


配列同士では


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


配列hairetu2に


hairetu2=hairetu1;


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


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


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


character2StatusData=character1StatusData;


を実行することにより


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


character1StatusData.HP

character1StatusData.MP

character1StatusData.AP

character1StatusData.DP


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

8

2

8

10


構造体変数character2StatusDataのメンバ変数


character2StatusData.HP

character2StatusData.MP

character2StatusData.AP

character2StatusData.DP


に代入することができます


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


てんC「また


配列とちがい


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


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つのステータスデータを


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


てんC「はいっ😊


構造体をつかえば


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


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


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

HP

MP

AP

TP


を同時に変更できました



ですから



構造体の配列を

使えば


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

character1

character2

character3


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

HP

MP

AP

TP

を同時に変更させることができるのです」


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


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

複数のキャラクターの

数値データ

HP

MP

AP

TP

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

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る