【发布时间】:2016-04-28 02:21:29
【问题描述】:
我有一个这样的双重功能:
double f(){
double value=0.1234;
return value;
}
在另一个函数中,我收到了值并打印了它。
printf("%f",f());
我想查看打印的值 0.1234,但打印的是 0。 如果我这样转换类型:
printf("%f",(double)f());
会打印一个非常奇怪的值,例如 -147923499.34。
经过一番检查(print sizeof)我发现f()的返回值是4字节,而double类型应该是8字节。
那么,这其中的根本原因是什么?如何从函数中返回正确的双精度值?
【问题讨论】:
-
Seems to work fine。请发布一个最小的可编译程序来演示您的错误。
-
也许你在调用
f()时没有原型在范围内 -
@Alfie:优先级不是这样工作的,如果是这样,至少有两个原因不会编译。
-
是 C 还是 C++?你有两个标签,但它们是不同的语言。
-
C is not C++,而这个问题正是存在差异的原因。如果不对函数进行原型设计,您的代码将无法在 C++ 中编译。在 C (C89) 中,该代码可以正常编译,但会产生不良影响,就像函数在实际返回双精度时返回 int 一样。所以不要将问题标记为 C 和 C++。相反,请选择您实际使用的语言并将该标签应用于您的问题。