【发布时间】:2019-04-05 01:10:39
【问题描述】:
如果所有引用和指针都简化为纯变量,究竟是什么阻止了编译器理解以下程序?
/* 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 做 这个 的事情?”
这里的任何直觉都会很有帮助 - 指向其他讨论的链接,例如“为什么使用指针”或“何时使用指针”不是我想要的。
【问题讨论】:
-
这就是为什么 -> "/* 将三个数字作为输入并返回它们的总和和平均值作为输出 */ " 指针用于从函数返回 2 个值,而不仅仅是一个。 (顺便说一句,C 没有引用)。
-
这似乎答案是“由于另一个不同的约束,C 必须遵守一个约束”。如果 C 需要查看 & 和星号才能从函数返回多个值,那么明显的问题是……为什么?具体来说,如果所有指针和引用都被删除,是什么阻止了编译器理解程序?
-
如果您正在寻求关于 C 语言设计背后的推理的开放式讨论,那么这与 Stack Overflow 无关。
-
不是编译器不理解它,而是它不会是同一个程序或做同样的事情。
-
C 通过“值”(而不是通过“引用”或“名称”等)传递所有函数参数。这意味着被调用的函数获得了它自己的参数的本地副本。它可以更改它们,但这些更改对于被调用函数来说是严格本地的。如果您希望更改对调用者可见,那么您需要传递指向目标变量的指针,以便被调用函数可以修改它们。
标签: c pointers reference ansi-c