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