🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
main関数内で定義された構造体型の配列のアドレスを自作関数の引数となっているポインタ変数に参照渡ししてmain関数内で定義された構造体の配列に格納されている数値データを変更してみたいと思います。
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
を
変更してみよっか(*^_^*)」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます