为什么我需要在C中指定引用和指针而不是普通变量

时间:2019-04-05 01:10:39

标签: c pointers reference ansi-c

如果所有引用和指针都简化为普通变量,究竟是什么使编译器无法理解以下程序?

/* Takes three numbers as input and returns their sum and average as output */

#include <stdio.h>

void sum_n_avg(double arg1, double arg2, double arg3, double 
*sum, double *avg);

int main(){
  double one, two, three, sum, avg;
  printf("Enter three numbers> ");
  scanf("%lf%lf%lf", &one, &two, &three);
  sum_n_avg(one, two, three, &sum, &avg);
  printf("%lf is the sum, %lf is the average\n", sum, avg);
}

void sum_n_avg(double arg1, double arg2, double arg3, double *sum, double *avg){
  *sum = arg1 + arg2 + arg3;
  *avg = (*sum) / 3;
}

这个问题不是“我该怎么做”,而是“为什么C做这件事?”

这里的任何直觉都将非常有用-链接到其他讨论,例如“为什么使用指针”或“何时使用指针”,并不是我想要的。

1 个答案:

答案 0 :(得分:1)

sum_n_avg()需要5个输入:3个是double,2个是指针。

void sum_n_avg(double arg1, double arg2, double arg3, double *sum, double *avg);

除了2个指示数据存储位置的指针外,没有任何其他信息从函数中发出。


  

如果所有引用和指针都简化为普通变量,究竟是什么使编译器无法理解以下程序?

如果从sum_n_avg()中删除“引用”,则

sum_n_avg_noref(double arg1, double arg2, double arg3, double  sum, double avg)

是需要5个double输入的函数。

该函数没有信息,也没有任何参数只能是“输入”的提示。


  

为什么C做这个事

C成功的原因是设计简单。函数参数是输入。返回值是输出。

涉及复杂的事情。

要容纳一个以上的输出,代码会将指针作为存储数据的位置传入。