printf("%f", hogehoge);
変数を宣言する場所,次の3箇所と考えてよい.
これが理解できたならば,図1のプログラムの実行結果が,以下のように なることが分かるであろう.自分でこのプログラムの動作を追ってみよ.
fuga at main = 222 hoge at main = 111 foo at test = 333 foo at test = 111 bar at for loop = 444 bar at for loop = 444
それでは,「グローバル変数とローカル変数で同じ変数名を使った,どちらが実際使われ
るのか?」ということになる.そのため,同じ変数名には優先順位がある.優先度の高い
順に並べると,(1)ブロック内宣言の変数,(2)ローカル変数,(3)グローバル変数となる.
これを理解するために,同じ変数名を使ったプログラムをリスト1に
示す.
1 #include <stdio.h> 2 3 void test(void); // プロトタイプ宣言 4 5 int hoge=999; 6 7 //=============================================== 8 // メイン関数 9 //=============================================== 10 int main(void){ 11 int i; 12 13 printf("hoge at main = %d\n", hoge); 14 15 test(); 16 17 for(i=1; i<2; i++){ 18 int hoge=888; 19 printf("hoge at for loop = %d\n", hoge); 20 21 } 22 23 return 0; 24 } 25 26 27 //=============================================== 28 // test ユーザー定義関数 29 //=============================================== 30 void test(void){ 31 int hoge=777; 32 33 printf("hoge at test = %d\n", hoge); 34 35 }このプログラムを実行した結果を以下に示す.変数のスコープと優先順位が理解できたなば,こ の実行結果に納得がいくだろう.
hoge at main = 999 hoge at test = 777 hoge at for loop = 888
1 #include <stdio.h> 2 #include <math.h> 3 4 void shisuu_kansu(double a, double b); // プロトタイプ宣言 5 6 double value1, value2; // global 変数 7 8 //================================================================ 9 // メイン関数 10 //================================================================ 11 int main(void){ 12 double a, b; 13 14 printf("a^bとa^(-b)を計算します\n"); 15 printf("a?\t"); 16 scanf("%lf",&a); 17 printf("b?\t"); 18 scanf("%lf",&b); 19 20 shisuu_kansu(a, b); 21 22 printf("a^b = %f\n", value1); 23 printf("a^(-b) = %f\n", value2); 24 25 return 0; 26 } 27 28 //================================================================ 29 // ユーザー定義関数 a^bとa^(-b)を計算 30 //================================================================ 31 void shisuu_kansu(double a, double b){ 32 33 value1=pow(a,b); 34 value2=pow(a,-b); 35 36 }
x^aとx^(-a)を計算します x? 6.3 a? 1.35 x^a = 11.998024 x^(-a) = 0.083347