void f(int x){}型の自作関数の()内で変数宣言されたint xに代入されたデータはブロック{}内の命令文が実行されるとメモリにつけられた変数名xと共にコンピュータのメモリから消去されます


さあ void f(int x)型の自作関数の変数宣言int xにより作製された


変数xのスコープ(変数宣言により作製された変数xの使用可能な範囲)が


どうなっているのかわかったかな😊


自作関数の()内の変数宣言int xにより作製された


変数xのスコープは


void f(int x){👉

printf("%dをとりこみました。\n",x);

👈}


👉👈内でしたね


では


この変数xの寿命

(変数xがメモリに保持されてから消去されるまでの間)




はどうなっているのかというと・・・



void f(int x){}型の自作関数の()内で


変数宣言されたint xに代入されたデータは


自作関数のブロック{}内の命令文が実行されると


変数xごとコンピュータのメモリから消えてしまいます



その様子を


一緒に観察してみませんか?


サンプルとして以下のプログラムを用います。


#include <stdio.h>


void f(int x){

printf("%dをとりこみました。\n",x);

}


int main(void){

f(1);

return 0;

}


コンパイル結果

1をとりこみました。


マックス「おおぅ いいじゃないか


自作関数のint xに数値1を代入されたもの


f(1);


ソースコードに記述されているのか」


アレサ「このプログラムで


自作関数


f(1);

が実行されると


int xに代入された数値1は


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


変数xごとコンピュータのメモリ内から消去されます。


では😊


もう1つ


次のようなプログラムを観察してみますか?


#include <stdio.h>


void f(int x){

printf("%dをとりこみました。\n",x);

}


int main(void){

int a=2;

f(1);

printf("%dをとりこみました。\n",a);

return 0;

}


このプログラムにおいて


変数aに格納されている数値データ2は


#include <stdio.h>


void f(int x){

printf("%dをとりこみました。\n",x);

}


int main(void){👉

int a=2;

f(1);

printf("%dをとりこみました。\n",a);

return 0;

👈}


aが変数宣言された👉👈で示されるブロック{}内の命令文が全て実行されるまで


コンピュータのメモリに保存されています。


このプログラムで


自作関数に数値1を代入した

f(1);

が実行された場合


int xに格納された数値データ1は


変数xごとコンピュータのメモリから消えてしまいますが


その直後の時点、つまり


f(1);


の次の命令文


printf("%dをとりこみました。\n",a);


が実行される前の時点では


int a=2;


により


変数aに格納されている数値データ2は


まだコンピュータのメモリ内に保存されています


そして


f(1);


の次の命令文


printf("%dをとりこみました。\n",a);


が実行されるときに


まだメモリに保存されている


変数aに格納されている数値データ2の情報が利用されるというわけですの


自作関数の()内で変数宣言された変数xのデータ情報は


コンピュータのメモリから消えていても


main関数のブロック内で変数宣言された変数aのデータ情報は


コンピュータのメモリに保存されているというわけです。


そして


main関数のブロック内の全ての命令文の実行の終了とともに


main関数のブロック内で変数宣言された変数aは


格納されている数値データ2とともに


コンピュータのメモリから消去されます。」


ソーラー「このコンピュータのメモリから


データが消去される仕組みは素晴らしいね。アレサ。


メモリにデータがどんどんたまっていったら


コンピュータはメモリが使用できなくなるものね。」


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

作者を応援しよう!

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

応援したユーザー

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