それでは変数のスコープをよりよく理解できる次のおもしろ問題にチャレンジしてみましょう。

scanf関数をつかって変数aに数値7を格納してみます ただしこのプログラムでは5つのaの変数宣言が行われています 一体どの変数aに数値7は格納されるのでしょうか?

solarplexuss

「今日は わたくし solarplexussが


変数宣言された変数の使用可能範囲(スコープ)


がどうなっているか?


変数のスコープ問題にチャレンジしてみま~す。


ドキドキします。



ピロリロリ~ン

変数のスコープ問題の登場です



🐣変数のスコープ問題🐤


scanf関数を使って数値7を変数aに格納してみます


ただし、このプログラムではaの変数宣言が5つ行われています


どの変数aに数値7は格納されるでしょうか?


#pragma warning(disable: 4996)

#include <stdio.h>


int a=100;


void f(int a){

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

}


int main(void){


printf("入力した数値は%dです。\n",a);


int a=1000;

int b;

int c;


printf("何か数値を入力してください。\n");

scanf ("%d",&a);

f(a);

printf("入力した数値は%dです。\n",a);

for(b=0;b<2;b++){int a=10000;

for(c=0;c<2;c++){int a=100000;

printf("入力した数値は%dです。\n",a);

}

printf("入力した数値は%dです。\n",a);

}

printf("入力した数値は%dです。\n",a);

return 0;

}

コンパイル結果


入力した数値は100です

何か数値を入力してください。

7(と入力すると)

7を取りこみました

入力した数値は7です

入力した数値は100000です

入力した数値は100000です

入力した数値は10000です

入力した数値は100000です

入力した数値は100000です

入力した数値は10000です

入力した数値は7です


さあ どうしてこのような

コンパイル結果になったのでしょうか?



solarplexuss

「?????

はあ?


なにこれ???


aの変数宣言が5つ?


aの変数宣言は


int a=100;

int a=1000;

int a=10000;

int a=100000;


の4つしかない?


と思ったら


自作関数


void f(int a){

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

}


の中で


変数宣言 int a;

がおこなわれているから


全部で


aの変数宣言が5つあるってことになるのかいな


scanf関数をつかって


数値7をどの変数宣言によって作製されたaに格納しようとしているのか・・・な・・・



scanf関数をつかって数値7を変数aに格納するには


まず


scanf関数が使われる前に


事前に


数値7を格納するために


変数宣言 int a;が行われている必要があったっけ~?


それとそれと・・・


確かscanf関数をつかって


変数aに数値7を格納するとき


int a;

と変数宣言されていても


int a=10;

と変数宣言,初期化がおこなわれていても


scanf関数をつかって変数aに数値7を格納できるんです


すごいですよね。


つまり


scanf関数をつかって変数aに数値を格納するとき


int a=8;

int a=888;

int a=1028;

int a=10022;

のように


すでに変数aに数値が代入されていても


代わりに変数aに数値7を格納できるんでした。


なぜなら


これは


次のプログラムをみてもわかるように


#include <stdio.h>


int main(void){


int a=2;

printf("%d\n",a);

a=5;

printf("%d\n",a);


return 0;

}


コンパイル結果

2

5


変数aに数値2が格納されているのを

変数aに数値5が格納されている状態に変更するのと


同じことだからでした


ここから先の解説は・・・


やっぱり アレサとソーラー呼ぼうっと🌻」






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

作者を応援しよう!

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

応援したユーザー

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