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