天国にいけるC言語入門 ヘキサ構造体 ver3.2128
void f(int x){}型の自作関数の()内で変数宣言されたint xに代入されたデータは自作関数fが実行されるとメモリにつけられた変数名xと共にコンピュータのメモリから消去されます
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とともに
コンピュータのメモリから消去されます。」
ソーラー「このコンピュータのメモリから
データが消去される仕組みは素晴らしいね。アレサ。
メモリにデータがどんどんたまっていったら
コンピュータはメモリを使用できなくなるときがくるからね
どんな命令も実行することができなくなるものね。」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます