以下 C 程序的输出是什么?
#include <stdio.h>
void abc (float, float, float *);
void main() {
float y = 2.5;
abc (6.5, y, &y);
printf ("%f\n",y);
}
void abc (float x, float y, float *z) {
y = y - 1;
*z = *z + x;
}
a) 1.5 b)2.5 c) 8.0 d) 9.0 e) 9.5
答案是 d) 9.0。有人可以解释一下这是为什么吗?我认为它会是 c) 8.0,因为在函数中我根据 y=y-1 将 y 的值更新为 1.5。谢谢!
最佳答案
简短的回答是 main
中的 y
和 abc
中的 y
具有相同的名称,但它们是不同的。 abc
中的只是一份副本。
首先,请注意函数 abc
的第一行是无用的,它修改了 y
,但之后不再使用 y
。由于当您调用函数时,会创建每个参数的副本,因此这不会修改 main
中的 y
。现在,abc
中的 y
根本没有被使用,因此我们可以将其从参数中删除。
所以你可以这样重写abc
:
void abc (float x, float *z) {
*z = *z + x;
}
由于如此简单的一行函数没有多大意义,我们可以像这样重写您的程序:
void main() {
float y = 2.5;
y = y + 6.5;
printf ("%f\n",y);
}
现在结果已经很明显了。
关于c - 带有浮点值的指针,确定输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28943896/