• 締切済み

C言語 プログラム問題

 すいません、C言語初心者です。以下のプログラムがわからないので、よければ教えてください。 #include<stdio.h> int f(int a); int g(int *a); main(){ int i, j, na =10; int a[12] = {1,2,3,4,5,6,7,8,9,10,11,12}; printf("a = "); for (i=0; i<na; i++); printf("%d ",a[i]); j = f(a[2]); j = f(a[3]); j = g(a+4); j = g(a+5); printf("\na = "); for (i=0;i<na;i++) printf("%d ",a[i]); printf("\nj = %d\n",j); } int f(int a) { static int total=0; total = total + a; a = a+50r; return total; } int g(int *a) { static int total=0; total = total+(*a); (*a) = (*a) +50; return total; } <結果> a = 1 2 3 4 5 6 7 8 9 10 a = 1 2 3 4 55 66 7 8 9 10 j = 11    まず、結果がなぜ下の段に55 56があるのか、そして関数f,gの機能、最後にj=11の意味です。j=5+6 =11とは聞きましたがどこから出ているのかがわかりません。  よろしくお願いします。

みんなの回答

  • xceu
  • ベストアンサー率25% (2/8)
回答No.2

この問題の趣旨は値渡しと参照渡しの違いを説いているんでしょうね。 for文のあとの;はいりません。要確認 <結果>は a = 1 2 3 4 5 6 7 8 9 10 a = 1 2 3 4 55 56 7 8 9 10 j = 11 になります。    要確認 コメント入れといたので参考にしてください。 #include<stdio.h> int f(int a); int g(int *a); main(){ int i, j, na =10; int a[12] = {1,2,3,4,5,6,7,8,9,10,11,12}; printf("a = "); for (i=0; i<na; i++) printf("%d ",a[i]); j = f(a[2]); j = f(a[3]); j = g(a+4);       //配列aの先頭から+4つまり、a[4]=5 j = g(a+5);       //配列aの先頭から+5つまり、a[5]=6 printf("\na = "); for (i=0;i<na;i++) printf("%d ",a[i]); printf("\nj = %d\n",j); } int f(int a) { static int total=0; total = total + a; a = a+50; return total; } int g(int *a) {    //g(a+4)の時*a=5,g(a+5)の時*a=6 static int total=0; total = total+(*a);   //g(a+4)の時total=5,g(a+5)の時total=11 (*a) = (*a) +50;    //g(a+4)のとき*a=55つまり、a[4]=55 return total;   //g(a+5)のとき*a=56つまり、a[5]=56 }    //よってa[12]=1,2,3,4,55,56,7,8,9,10,11,12}    //になっている。 <結果> a = 1 2 3 4 5 6 7 8 9 10 a = 1 2 3 4 55 56 7 8 9 10 j = 11

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.1

ポインタ渡しと、値渡しの、場合の、動きの違いを試みているプログラムの様ですね。 実行結果が、なぜそのようになるのかは、 変数の内容について、トレースしてみると、わかるはずです。

関連するQ&A

専門家に質問してみよう