🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
参照渡し(ポインタ渡し)は ゲームキャラクターが移動することやゲームキャラのHPやMPの値が変化することと関係しています
参照渡し(ポインタ渡し)は ゲームキャラクターが移動することやゲームキャラのHPやMPの値が変化することと関係しています
参照渡し(ポインタ渡し)は
ゲームキャラクターが移動することやゲームキャラのHPやMPの値が変化することと関係しています
🌞 🌞 🌞
ソーラー「今日は そのことについて考察してみようっ てんC!」
ソーラー「ようは
ゲームキャラのHPを自作関数を使って増加させてみればいいんだね」
ソーラー「まずは参照渡し(ポインタ渡し)でなく
値渡しの方法を
使ってみて、ゲームキャラのHPの変化をみてみよっかな」
てんC「はいっ
ここでは 自作関数
ソーラー「自作関数
てんC「はいっ自作関数
実行されると ゲームキャラのHPが約25%増加されるのです」
ソーラー「いいね! ゲームプログラミング解説らしくなってきたじゃないか」
てんC「それでは
自作関数
#include <iostream>
using namespace std;
void Heal(int x) {
x = x*1.25;
cout << x << "\n";
}
/*自作関数Healを定義しました。
int xでxの変数宣言を行いながら、かつ
変数xを自作関数Healの引数(つまり、仮引数)に指定しています*/
int main()
{
int HP = 125;
/*HPを変数宣言し、変数HPに数値125を格納しました。*/
Heal(HP);
/*自作関数の仮引数である変数xに
変数HPを代入し数値125を値渡しします
*/
cout << HP << "\n";
/*このときmain関数内で変数宣言された変数HPの値は
どう表示されるでしょうか?
*/
return 0;
}
ビルド実行結果
156
125
ソーラー「やっぱり 値渡しの方法だと
自作関数の引数となっているint xに
Heal(HP);
と
変数HPを代入しても
main関数内で変数宣言された変数HPの格納している数値データ
125が渡されるだけで
main関数内で変数宣言された変数HPは自作関数Healの操作
x = x*1.25;
の影響を受けず
変数HPに格納されている数値データは125のまま変化しないのが
1番最後の命令文
cout<<HP<<"\n";
のビルド実行結果
125をみてわかるよね。
それに対し
自作関数の定義
void Heal(int x) {
x = x*1.25;
cout << x << "\n";
}
の
cout << x << "\n";
によって表示される値は156になっています。
つまり
変数xという名前の付けられたメモリに格納された数値データは
125から156に変更されているのですが
変数HPという名前の付けられたメモリに格納された数値データは
125から125のまま変化していません
これは すなわち
ゲームキャラのHPを表示する
命令文
cout<<HP<<"\n";
を実行しても
ゲーム画面内のステータス画面で
つねに
HPは125を示していることになるんだ ははは
ある意味 無敵だね💖
てんC 今度は
参照渡し(ポインタ渡し)の方法を使って
ゲームキャラのHPを増加させてみようよ🌞」
てんC「はい
今度は
参照渡し(ポインタ渡し)ですので
自作関数の定義を
void Heal(int x){
x=x*1.25;
cout<<x<<"\n";
}
から
ポインタ変数を使った
void Heal(int* ptx){
*ptx=*ptx*1.25;
printf("%d\n" ,*ptx);
}
に変更してみます
そのプログラムは次のようになりますの。
#include <iostream>
using namespace std;
void Heal(int* ptx) {
*ptx = *ptx*1.25;
cout<<*ptx<<"\n";
}
/*自作関数Healを定義しました。
int* ptxでptxのポインタ変数宣言を行いながら、かつ
ポインタ変数ptxを自作関数Healの引数に指定しています*/
int main()
{
int HP = 125;
/*HPを変数宣言し、変数HPに数値125を格納しました。*/
int* ptHP;
ptHP = &HP;
/* ptHPをポインタ変数宣言し、変数HPのアドレスをptHPに格納しました。*/
Heal(ptHP);
/*自作関数の仮引数であるポインタ変数ptxに
main関数内で変数宣言された
変数 HPのアドレスを格納したポインタ変数ptHPを代入しました
*/
cout<<HP<<"\n";
return 0;
}
ビルド実行結果
156
156
ソーラー「1番最後の命令文
cout<<HP<<"\n";
のビルド実行結果をみてもわかるように
main関数内で変数宣言された変数HPの値が自作関数Healの操作を受けて
ゲームキャラのHPが
125から156に増加しているね。
Healがかかったね。
このように参照渡し(ポインタ渡し)をつかえば
ゲームキャラのステータス画面に表示される
HPの値も156になるわけだね てんC」
てんC「そうですね。ソーラーさん。
ゲームキャラも喜んでいますの」
ソーラー「喜んでる!、喜んでる?
参照渡し(ポインタ渡し)が使われると
値渡しの時と違って
自作関数を使って
ゲームキャラの位置や
ステータスデータを変更できるんだね」
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
このように
ポインタ変数ptxに変数HPのアドレス&HPが代入されると
*ptxはHPのアドレス&HPの場所のメモリに格納されている数値
をあらわします。
この場合は
int HP=125;
が実行されているので
HPのアドレスの場所のメモリに格納されている数値データ
つまり
*ptxに格納されている数値データは125になります。
それが
自作関数の定義の
*ptx=*ptx*1.25により
*ptxに格納される値は
125×1.25倍=156.25になりそうですが
*ptxはint型の変数aのアドレスのメモリに格納されている
数値データなので
156.25の0.25はint型の変数aのアドレスのメモリに格納されず
*ptxのもつ値は
*ptx=156となります。
もともと
ptxのポインタ変数宣言int* ptxにより
作成されるポインタ変数ptxは
int型の変数のアドレスを格納するポインタ変数なのでしたね.
int型の変数のアドレスを格納しているので
*ptxはint型の変数のアドレスのメモリに格納されている数値データを
あらわすことになります。
*ptxに格納される数値データはint型に格納されることになり
*ptxには整数値しか格納できないというわけです。
solarplexussより
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます