🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
ローカル変数はそのローカル変数が宣言された{}ブロック内の命令文がすべて実行されるとメモリに保存されたローカル変数の名前、ローカル変数の格納している値とともにコンピュータのメモリから消去されます
次に変数の寿命について学んでみましょう。変数に関するデータはコンピュータのメモリに保存されるだけでなく消去もされます。どの時点で消去されるのでしょうか?😊
ローカル変数はそのローカル変数が宣言された{}ブロック内の命令文がすべて実行されるとメモリに保存されたローカル変数の名前、ローカル変数の格納している値とともにコンピュータのメモリから消去されます
ローカル変数は
そのローカル変数が宣言された{}ブロック内の命令文が
すべて実行されると
そのローカル変数に格納された値とともに
コンピュータのメモリから消えてしまいます。
ソーラー「ローカル変数は消えてしまう?の?
これはど~いう意味なんだい」
てんC「はい😊
次のプログラムでは
#include <iostream>
using namespace std;
int main(){
int a=1;
cout <<a<< "をとりこみました\n";
return 0;
}
main関数が実行されると
int a=1;
と
ローカル変数aが変数宣言されたブロック{👉👈}内の命令文
int main(){👉
int a=1;
cout <<a<< "をとりこみました\n";
return 0;
👈}
が
全て実行されます。
すると
main関数のブロック{}内で
変数宣言、初期化
int a=1;
により生成された
main関数のローカル変数aは
main関数のローカル変数aに格納された値1とともに
コンピュータのメモリの節約のため
コンピュータのメモリから消去されます。
つまり
あるメモリにaという名前が割り振られていたのですが
その名前が消えてしまうというわけです。
そしてそのメモリに格納されていたデータも消えてしまうのです。
また
次の自作関数fが設定されたプログラムをごらんください
👇
#include <iostream>
using namespace std;
void f(void){
int a=1;
cout <<a<< "をとりこみました\n";
}
int main(){
int b=2;
f();
cout <<b<< "をとりこみました\n";
return 0;
}
ビルド実行結果
1
2
👆
このプログラムにおいて
自作関数f();が実行されると
次の自作関数のブロック{👉👈}内の命令文が全て実行されます。
void f(void){👉
int a=1;
cout <<a<< "をとりこみました\n";
👈}
自作関数f();の実行が終了すると
自作関数のブロック{}内で
変数宣言
int a=1;
により生成された自作関数fのローカル変数aは
自作関数fのローカル変数aに格納された値1とともに
コンピュータのメモリの節約のため
コンピュータのメモリから消去されます。
つまり
メモリを管理するために付けられていたaという名前が
消えてしまうというわけです。
実はaという名前の変数を変数宣言により作製し
メモリを変数aで管理しているとき
そのaという名前のデータもメモリに格納されているのです
そのaという名前のデータがメモリから消去されるというわけですね。
そして
aと名づけられたメモリに格納されていたデータも消えてしまいます。
ではでは(^o^)/次のプログラムをご覧ください」
ソーラー「は~い」
てんC
「ローカル変数aが変数宣言されたブロック{👉👈}内の命令文が
全て実行されると
ローカル変数aは
その名前とともに
ローカル変数aに保存された値ごと
コンピュータのメモリから消去される
このことは
ローカル変数aが
main関数や自作関数のブロック{}内で定義された場合だけでなく
ローカル変数aが
for文のブロック{}内で変数宣言された場合にもあてはまります。
はいっ それでは
こちらがサンプルプログラムとなります。
#include <iostream>
using namespace std;
int main(){
int a;
for(a=1;a<3;a++){
int b;
for(b=1;b<4;b++){
int c;
for(c=1;c<5;c++){
cout<<c<<"回目のご飯はNouvel de かつおです\n";
}
}
}
return 0;
}
てんC「このプログラムは
for文3重入れ子構造になっています。
この場合
まず命令文
int c;
for(c=1;c<5;c++){
cout<<c<<"回目のご飯はNouvel de かつおです\n";
}
からプログラムが実行されます。
for(c=1;c<5;c++)のはたらきにより
c=1
c=2
c=3
c=4
のときの
cout<<c<<"回目のご飯はNouvel de かつおです\n";
が実行される
つまり
cout<<1<<"回目のご飯はNouvel de かつおです\n";
cout<<2<<"回目のご飯はNouvel de かつおです\n";
cout<<3<<"回目のご飯はNouvel de かつおです\n";
cout<<4<<"回目のご飯はNouvel de かつおです\n";
が実行されることになります
c++のはたらきにより
cの値は4から5へと変化します
c=5とローカル変数cに5が代入された後
c<5の条件式の判定により
for文の繰り返しはストップします。
ですので最終的にローカル変数cに格納されている値は5となっています。
👇
int c;
for(c=1;c<5;c++){
cout<<c<<"回目のご飯はNouvel de かつおです\n";
}
👆この命令文自体は
int b;
for(b=1;b<4;b++){👉
int c;
for(c=1;c<5;c++){
cout<<c<<"回目のご飯はNouvel de かつおです\n";
}
👈}
の{👉と👈}で示される💖ブロック{}内💖に記述されています。
ですので{👉と👈}内の命令文
int c;
for(c=1;c<5;c++){
cout<<c<<"回目のご飯はNouvel de かつおです\n";
}
が実行されると
ブロック{}内で変数宣言されたローカル変数cは
コンピュータのメモリの節約のため
メモリにつけられたcという名前
ローカル変数cに格納されている数値5ごと
コンピュータのメモリから消去されます。」
ソーラー「へえ、そういう仕組みなんだ」
てんC「
同様に👇のソースコードの
{👉👉と👈👈}で示されるブロック内で
定義されたローカル変数bは
int a;
for(a=1;a<3;a++){👉👉
int b;
for(b=1;b<4;b++){
int c;
for(c=1;c<5;c++){
cout<<c<<"回目のご飯はNouvel de かつおです\n";
}
}
👈👈}
👆のソースコードが実行されると
{👉👉と👈👈}内で変数宣言されたローカル変数bは
コンピュータのメモリの節約のため
メモリに付けられたbという名前
ローカル変数bに格納されている数値4ごと
(このときローカル変数bに格納されている数値データは4となっています。)
コンピュータのメモリから消去されます」
ソーラー「おおぅ なんと
for文のブロック{}内で定義されたローカル変数は
for文が実行されると
ローカル変数に格納された値ごと
消去されるんだね。」
てんC「はい、そうなんです
ブロック{}内で変数宣言されたローカル変数のデータ情報は
ブロック{}内の命令文が実行されると
すぐに ローカル変数ごと
メモリから消去されます。
同様に
元のソースコードでは
main関数のブロック{👉👈}内では
ローカル変数aが変数宣言されていますが
👇
#include <iostream>
using namespace std;
int main(){👉
int a;
for(a=1;a<3;a++){
int b;
for(b=1;b<4;b++){
int c;
for(c=1;c<5;c++){
cout<<c<<"回目のご飯はNouvel de かつおです\n";
}
}
}
return 0;
👈}
👆
main関数が実行されると
ブロック{👉👈}内で定義されたローカル変数aは
(この時for(a=1;a<3;a++)のはたらきによりa=3となっているのですが)
コンピュータのメモリの節約のため
メモリに保存されているaという名前も
ローカル変数aに格納されている数値3も
コンピュータのメモリから消去されます」
ソーラー「つまりmain関数が実行されたら
main関数のブロック{}内で定義されたローカル変数そのものが
コンピュータのメモリの節約のため
格納している数値データごとコンピュータのメモリから消えてしまうんだね。
このことは つまり
ソースコードがビルドされて実行されたあとは
コンピュータのメモリ内には何もデータが残っていないということなんだね」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます