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

标签 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 要做这个事情?”

这里的任何直觉都会非常有帮助 - 指向其他讨论(例如“为什么使用指针”或“何时使用指针”)的链接不是我想要的。

最佳答案

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

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

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

<小时/>

What exactly is stopping the compiler from understanding the following program if all references and pointers were reduced to just plain variables?

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

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

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

函数中没有任何信息,也没有表明参数只能是“输入”以外的任何内容。

<小时/>

why does C do this thing

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

引用复杂的事物。

为了容纳多个输出,代码传入指针作为存储数据的位置。

关于c - 为什么我需要在 C 中指定引用和指针而不是普通变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55526946/

相关文章:

c 文件处理程序无法创建超过 2 个文件

c++ - Mac + xcode 6.4 - header 包含路径

c - 不同数据类型的变量如何分配内存?

vba - Excel VBA - 引用写入公式的单元格

c - 访问 union 中不同类型的未分配值

c - 如何增加 C 语言进程的 Windows 和/或 Linux 读取缓存大小

c - 将局部指针变量的地址返回给 main() 函数

c - 为什么我可以释放内存两次,但在不同情况下却不能?

c++ - C++ 中的 vector 指针和通过引用传递对象

c++ - 通过引用传递参数到底是什么?