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


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


(簡単にいいかえると 🐤


自作関数の実行が終了すると自作関数のローカル変数はメモリから消去されます


となります  🐤)




さあ void f(int x){}タイプの自作関数fの引数の()内のローカル変数宣言int xにより作製された


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


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


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


変数xのスコープは以下のように


void f(int x){👉

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

👈}


{}の👉👈内でしたね


では


この変数xの寿命

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




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



自作関数fが


f(1);



実行されたとします


このとき


void f(int x){}型の自作関数fの()内で変数宣言されたint xに


代入されたデータ1は


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


(自作関数の実行が終了すると)


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



その様子を


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


以下のプログラムをご用意致しました

👇

#include <stdio.h>


void f(int x){

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

}


int main(void){

f(1);//👈ここです 自作関数fを実行しています

return 0;

}


プログラムの実行結果


1をとりこみました。


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


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


f(1);



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


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


自作関数


f(1);


が実行され


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


自作関数fの実行が終了すると


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


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


ソーラー「自作関数の実行が完了すると消えるんだね 単純なしくみなんだね」


アレサ「


では😊少し遊んで


このプログラムに手を加えた


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


#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;

}


このプログラムにおいて


main関数のローカル変数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が変数宣言されたブロック{}内の👉👈内の命令文が全て実行されるまで


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


このプログラムで


自作関数f(int x)のint xに数値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の情報が利用されるというわけですの


自作関数fの実行が完了することにより


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


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


main関数のブロック{}内の全ての命令文の実行が完了していないため


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


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


そして


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


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


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


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


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


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


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


コンピュータはメモリを使用できなくなるときがくるからね


どんな命令も実行することができなくなるものね。」


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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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