🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
グローバル変数bを自作関数の引数となったグローバル変数bに代入した場合も値渡しとなるためグローバル変数bは自作関数の操作を受けることはなくグローバル変数bに格納されている数値は変更されません。
グローバル変数bを自作関数の引数となったグローバル変数bに代入した場合も値渡しとなるためグローバル変数bは自作関数の操作を受けることはなくグローバル変数bに格納されている数値は変更されません。
ソーラー「先程のプログラムのように
グローバル変数bを自作関数内で変数宣言された変数aに代入した場合も
グローバル変数bの格納している値だけが
自作関数内で変数宣言された変数aに
値渡しされるんだね。
👇
#include <iostream>
using namespace std;
int b = 2;
int f(int a) {
a = a + 1;
return a;
}
int main() {
cout<< f(b)<< "\n";
cout << b << "\n";
return 0;
}
ビルド実行結果
3
2
てんC
「グローバル変数bでなく
main関数内で変数宣言され
作製された
ローカル変数bを
自作関数f(int a)内で変数宣言された
自作関数の引数となっている変数aに
代入した場合のプログラムは
次のようになっていました。
そのときも
ローカル変数bに格納されていた値のみが
変数aに代入されていたのですね。
#include <iostream>
using namespace std;
int f(int a) {
a = a + 1;
return a;
}
int main() {
int b = 2;
cout<< f(b)<< "\n";
cout << b << "\n";
return 0;
}
ビルド実行結果
3
2
てんC「値渡しのシステムは
main関数内で変数宣言されたローカル変数bを
自作関数内で変数宣言された
ローカル変数aに代入した場合も
グローバル変数として変数宣言されたグローバル変数bを
自作関数内で変数宣言された
ローカル変数aに代入した場合も
同様に機能し
グローバル変数b
ローカル変数b
に格納されている値2だけが変数aに渡されているのですね
変数aという名前の付いたメモリ
と
変数bという名前の付いたメモリ
が2つ
独立して存在しているためにおこる現象でした。
ですから
グローバル変数b
ローカル変数b
ともに自作関数の操作の影響を受けず
グローバル変数b
ローカル変数b
に格納されている値は2のままなのです」
ソーラー「ふふふ
なあるほど~
では~
このプログラムではどうかな?」
#include <iostream>
using namespace std;
int f(int b) {
b = b + 1;
return b;
}
int main() {
int b = 2;
cout<< f(b)<< "\n";
cout << b << "\n";
return 0;
}
ビルド実行結果
3
2
ソーラー「このプログラムの命令文
cout << b << "\n";
によって表示される値は
2かな?
それとも3かな?」
てんC「はい
この場合
大分 前のエピソードでみてきたように
main関数内で定義されたローカル変数bと
自作関数内で定義されたローカル変数b
は
それぞれ別の変数と認識されています。
ですので
main関数内で定義されたローカル変数bが
自作関数内で定義されたローカル変数bに代入された場合も
main関数内で定義されたローカル変数bが
自作関数内で定義されたローカル変数aに代入された場合
main関数内で変数宣言されたローカル変数bに格納されている値2だけが
自作関数内で変数宣言されたローカル変数aに値渡しされたのと同じく
main関数内で変数宣言されたローカル変数bに格納されている値2だけが
自作関数内で変数宣言されたローカル変数bに値渡しされます
つまり
main関数内で変数宣言されたローカル変数bのメモリ
と
自作関数内で変数宣言されたローカル変数bのメモリ
の2つが独立して存在しているのですね。
よって
main関数内で変数宣言された
ローカル変数bのメモリに格納されている数値2を
自作関数内で変数宣言されたローカル変数bに渡しても
main関数内で変数宣言された変数bのメモリに格納されている値は
自作関数による操作を受けて変更されることはなく
main関数内で変数宣言された変数bに格納されている値は
2のまま変化しません
よって
cout<< f(b)<< "\n";
の実行により
main関数内で変数宣言された変数bが
f(b)
と
自作関数に代入されて
自作関数の定義の
b = b + 1;
が実行されると
自作関数内で変数宣言された変数bに格納されている値は
3になりますが
main関数内で変数宣言された変数bに格納されている値は
2のまま変化しません。
ですので
cout << b << "\n";
によってcout出力表示される
main関数内で定義されたローカル変数bに格納されている値は
2となります」
ソーラー「ではでは😊
さらに
このプログラムはどうかな?」
#include <iostream>
using namespace std;
int b = 2;
int f(int b) {
b = b + 1;
return b;
}
int main() {
cout<< f(b)<< "\n";
cout << b << "\n";
return 0;
}
ソーラー
「このプログラムでは
自作関数内で記述されている変数bは
ローカル変数bで
プログラムの冒頭で記述されている変数bは
グローバル変数bとなっています
そして
そのグローバル変数bを自作関数内の引数となっている
ローカル変数bに代入しているわけです。
このとき
cout << b << "\n";により表示される値は
2
なのでしょうか
3なのでしょうか?
さすがにこの状態で
自作関数f(int a)の引数として
f(b)
のように代入された
グローバル変数bは
自作関数の操作による影響を受けて
b=b+1;
が実行されて
グローバル変数bに格納されている値は2から3に
変化するようにもおもえるよね。」
てんC「どうなりますでしょうか
みなさんは
cout << b << "\n";によって表示される変数bの値は
どのようになるとお考えになられますか?」
(^_-)-☆
ソーラー「さあ みなさん
この面白いプログラムをビルド実行していいかな?」
#include <iostream>
using namespace std;
int b = 2;
int f(int b) {
b = b + 1;
return b;
}
int main() {
cout<< f(b)<< "\n";
cout << b << "\n";
return 0;
}
ソーラー「それではっ ビルドっ」
ビルド実行結果
3
2
ソーラー「このプログラムでは
自作関数の引数内でint bと記述されている変数bは
ローカル変数bで
プログラムの冒頭でint b = 2;
と変数宣言された変数bは
グローバル変数bなのですが
グローバル変数bを
自作関数の引数にf(b)
と代入しても
グローバル変数bが格納している2が
自作関数の引数となっているローカル変数bに
値渡しされるだけなのです
なぜなら
プログラムの冒頭で変数宣言されたグローバル変数bと名付けられたメモリ
と
自作関数内で変数宣言されたローカル変数bと名付けられたメモリ
の2つが独立して存在しているからなのですね。
よって
プログラムの冒頭で変数宣言された
グローバル変数bと名付けられたメモリに格納されている数値2を
自作関数内で変数宣言されたローカル変数bと名付けられたメモリに渡しただけでは
プログラムの冒頭で変数宣言された
グローバル変数bと名付けられたメモリに格納されている値は
自作関数の操作を受けて変更されるというようなことはなく
プログラムの冒頭で変数宣言された
グローバル変数bと名付けられたメモリに格納されている値は
2のまま変化しません
ですので
cout << b << "\n";
の命令文により表示される結果は
int b=2;のまま変化せず
2となります
いままでの結果をまとめると
🍓自作関数の引数となっている変数bに🍓
🍓どのような変数が代入されても🍓
(同じ変数名である
プログラムの冒頭で変数宣言された
グローバル変数b
もしくは
main関数内で変数宣言されたローカル変数b
あるいは別の変数名である
プログラムの冒頭で変数宣言された
グローバル変数a
もしくは
main関数内で変数宣言されたローカル変数a
など、どのような変数が代入されても)
その変数に格納されている値だけが
自作関数の引数となっている変数bにわたされます。
つまり
値渡しが
行われます。」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます