書籍でC言語を勉強中なのですが、下記のコードが掲載されてました。
これについて、なぜポインタ変数(answer)を使っているのですか?
関数sum()の引数に、answerではなくansのアドレス(&ans)を入れるのはナシなのでしょうか。
書籍から引用したコード↓
C
1#include <stdio.h> 2 3//プロトタイプ宣言 4//引数としてint型のポインタ変数を3個受け取り、int型の値を返す関数sumを定義 5int sum(int *, int * , int *); 6 7//関数の実体 8int 9sum(int *a, int *b, int *ans) 10{ 11 *ans = *a + *b; 12 13 return 0; 14} 15 16 17int 18main(int argc, char *argv[]) 19{ 20 int num_1; 21 int num_2; 22 int *answer;//←【疑問】なぜポインタ変数を使うのですか?【疑問】 23 int ans; 24 25 num_1 = 1; 26 num_2 = 2; 27 answer = &ans; 28 29 if (sum(&num_1, &num_2, answer) != 0) { 30 //現状のsum()関数は常に0を返すので、ここには絶対到達しない 31 printf("error\n"); 32 } 33 34 printf("The answer is ...\n"); 35 36 printf("answer = %d\n", *answer); 37 38 return 0; 39}
この書き方はナシなのでしょうか↓
C
1#include <stdio.h> 2 3//プロトタイプ宣言 4//引数としてint型のポインタ変数を3個受け取り、int型の値を返す関数sumを定義 5int sum(int *, int * , int *); 6 7//関数の実体 8int 9sum(int *a, int *b, int *ans) 10{ 11 *ans = *a + *b; 12 13 return 0; 14} 15 16 17int 18main(int argc, char *argv[]) 19{ 20 int num_1; 21 int num_2; 22 int ans; 23 24 num_1 = 1; 25 num_2 = 2; 26 27 if (sum(&num_1, &num_2, &ans) != 0) { 28 //現状のsum()関数は常に0を返すので、ここには絶対到達しない 29 printf("error\n"); 30 } 31 32 printf("The answer is ...\n"); 33 34 printf("answer = %d\n", ans); 35 36 return 0; 37}
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/25 16:08
2019/06/26 05:38
2019/06/26 14:04