次に変数の寿命について学んでみましょう。変数に関するデータはコンピュータのメモリに保存されるだけでなく消去もされます。どの時点で消去されるのでしょうか?😊

ローカル変数はそのローカル変数が宣言された{}ブロック内の命令文がすべて実行されるとメモリに保存されたローカル変数の名前、ローカル変数の格納している値とともにコンピュータのメモリから消去されます

ローカル変数は


そのローカル変数が宣言された{}ブロック内の命令文が


すべて実行されると


そのローカル変数に格納された値とともに


コンピュータのメモリから消えてしまいます。



ソーラー「ローカル変数は消えてしまう?の?


これはど~いう意味なんだい」



てん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関数のブロック{}内で定義されたローカル変数そのものが


コンピュータのメモリの節約のため


格納している数値データごとコンピュータのメモリから消えてしまうんだね。


このことは つまり


ソースコードがビルドされて実行されたあとは


コンピュータのメモリ内には何もデータが残っていないということなんだね」

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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