関数を使うときにポインタが必要になるのはなんで? プログラム例その二 †[edit]こんどは以下のプログラム例を考えてみよう. 1 void hoge(int x, int *y); 2 3 main() 4 { 5 int a, b; 6 7 a = 7; b = 3; 8 hoge(a, &b); 9 printf("%d %d\n", a, b); 10 } 11 12 void hoge(int x, int *y) 13 { 14 *y = x + *y; 15 printf("%d %d\n", x, *y); 16 } step1 8行目(main()からhoge()へ) †[edit]1 void hoge(int x, int *y); 2 3 main() 4 { 5 int a, b; 6 7 a = 7; b = 3; --> 8 hoge(a, &b); 9 printf("%d %d\n", a, b); 10 } 11 12 void hoge(int x, int *y) 13 { 14 *y = x + *y; 15 printf("%d %d\n", x, *y); 16 }
step2 12行目 †[edit]--> 12 void hoge(int x, int *y) 13 { 14 *y = x + *y; 15 printf("%d %d\n", x, *y); 16 }
step3 14行目 †[edit]12 void hoge(int x, int *y) 13 { --> 14 *y = x + *y; 15 printf("%d %d\n", x, *y); 16 }
step4 15行目 †[edit]12 void hoge(int x, int *y) 13 { 14 *y = x + *y; --> 15 printf("%d %d\n", x, *y); 16 }
step5 9行目 †[edit]1 void hoge(int x, int *y); 2 3 main() 4 { 5 int a, b; 6 7 a = 7; b = 3; 8 hoge(a, &b); --> 9 printf("%d %d\n", a, b); 10 } 11 12 void hoge(int x, int *y) 13 { 14 *y = x + *y; 15 printf("%d %d\n", x, *y); 16 }
step6 実行結果 †[edit]以上の実行の結果は 7 10 ← 15行目のprintf()の出力 7 10 ← 9行目のprintf()の出力 となる.関数hoge()がポインタとして番地を受け取った変数については,元の世界(main()の世界)の値が直接いじられることになる. |