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

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


solarplexuss


「今日は わたくし solarplexussが


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


がどうなっているか?


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


ドキドキします。



ピロリロリ~ン

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



🐣変数のスコープ問題🐤


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


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


どのint型の変数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のint型の変数宣言が5つ?


aのint型の変数宣言は


int a=100;

int a=1000;

int a=10000;

int a=100000;


の4つしかない?


と思ったら


自作関数


void f(int a){

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

}


の中で


変数宣言 int a;

がおこなわれているから


全部で


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


scanf関数をつかって


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



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


まず


scanf関数が使われる前に


事前に


数値7を格納する変数aを用意しておかないといけないね


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


それとそれと・・・


確かscanf関数をつかって


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


int a;


aの変数宣言されていて


変数が作製されている必要がありますが


たとえば


int a=1000;


aの変数宣言,初期化がおこなわれて


すでに


aに数値1000が代入されていても


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で共有
  • はてなブックマークでブックマーク

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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