🌞自作関数7 ローカル変数とは ある関数の中で定義された変数のことです その2

アレサ 「👇のプログラムの


         🍊自作関数void f(void)内🍊で


変数宣言&初期化された


int a=1;は


 🍎 main 関数内🍎


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


影響を与えないということですか・・・


👇のプログラム↓

。。。。。。。。。。。。。。。。。。

#include <stdio.h>


void f(void){

int a=1;

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

}


int main(void)

{

f();

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

return 0;

}


コンパイル結果


コンパイルエラー

main関数内のaが定義されていません。が表示されます。

。。。。。。。。。。。。。。。。。


アレサ「では


コンパイルエラーが出ないようにこのプログラムを修正してみます


いかがですか?ソーラーさん!!」


#include <stdio.h>


void f(void){

int a=1;

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

}


int main(void)

{

f();

int a=2;

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

return 0;

}


コンパイル結果


1をとりこみました。

2をとりこみました。


ソーラー 「ぷるっぷるっぷるっ


ああっ ううぅ


美しい・・・ぷるっぷるっぷるっ


ぴくぴくぴく


ううっとっ TTTrebian!」


アレサ 「ソーラーさん 痙攣してます!。」


ソーラー 「ううっ そう おおっと


自作関数void f(void)内のint a=1;は


main 関数内の


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


影響を与えないように


つまり


ある

関数内で定義された変数は


他の関数内で使用できないのなら


main 関数内で

int a=2;と


変数宣言された変数aは


それは自作関数void f(void)内の

変数宣言

int a=1;


によって作られた変数aとはちがう


全く新たにつくられた別の変数aということになるよね。


つまり

自作関数void f(void){}のブロック内のint a=1;と

main 関数のブロック内の int a=2;とは


同じaという変数名でもお互い独立した変数ということになるよ


ぴくぴくっ・・・・・ね・・・


う、うつくしい・・・」


アレサ「それでは親戚でもないんですか?」


ソーラー 「そうなるよね」


アレサ「それでは お茶目な双子でもないんですか?」


ソーラー 「よね」


アレサ「それでは


こんなプログラムはいかがですか?ソーラーさん!!


ソーラー「むむぅ」


アレサ

「

#include <stdio.h>


void f(void){

int a=1;

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

}


int main(void)

{int a=2;

f();

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

return 0;

}


コンパイル結果


1をとりこみました。

2をとりこみました。


ねえ、ソーラーさん(^^)」


ソーラー「???


前のプログラムとちょっとちがう。


今度はさきほどのプログラムと違い


main関数内で


int a=2;を

自作関数f();の前にもってきてるね


自作関数を実行する命令文f();


が


int a=2;の影響をうけるかどうか確かめようとしたのかな


これは・・・


うふふふ


f();はもとから


変数を引数にもつ関数ではないので


当然

int a=2;の影響はうけないんです。


ですから


f();は実行されると

1をとりこみました。とコンパイル結果に表示されます。


おもしろかったね」


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

作者を応援しよう!

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

応援したユーザー

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