c - 带有浮点值的指针,确定输出

标签 c pointers

以下 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 中的 yabc 中的 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/

相关文章:

c++ - `const` ness、引用和函数调用

c - 为什么 char* 创建一个字符串?

c - 在 C 中使用 getchar()

c - sed 匹配一个组并在重用之前修改该组

c - 非阻塞 BIO 并在 BIO_do_connect 后挂起

c - 结构数组与结构指针之间的表达式相等

C++:如何洗牌动态指针数组?

c - 使用 "->"而不是 "."访问结构会出现段错误

c - Typedef 结构、指针和将指针传递给函数

python - numpy.float128 的内部精度是多少?