【发布时间】:2012-02-20 20:14:52
【问题描述】:
void main()
{
float x = 8.2;
int r = 6;
printf ( "%f" , r/4);
}
很奇怪,我没有明确地将 printf func 中的 r(int 类型)强制转换为浮点数。但是,如果我更改声明 x 和 r 的顺序并先声明 r 然后 x 我会得到不同的结果(在这种情况下它是垃圾值)。我再次没有使用 x 在程序中的任何地方.. 这些都是我的意思是错的......我想让它们保持原样。但是当我执行第一段代码时,我得到 157286.375011 作为结果(一个垃圾值)。
void main()
{
int r = 6;
float x = 8.2;
printf ( "%f" , r/4);
}
如果我执行上面的代码,我会得到 0.000000 作为结果。我知道结果可能会出错,因为我在 printf 中使用了 %f 而它应该是 %d ......结果可能是错误的......但我的问题是为什么当我改变变量定义的序列时结果会改变。对与错不应该一样吗???
为什么会这样?
【问题讨论】:
-
你需要
#include <stdio.h>,而void main()应该是int main(void) -
任何未定义的行为就是:未定义。如果您想详细了解为什么未定义的行为会以某种方式“表现”,您最好询问编译器作者。 . .谁可能会回答“谁在乎?”但是,如果我不得不猜测,我会说这与 printf 期望浮点数的位数以及这些位在内存中的对齐方式有关,这可能会受到声明顺序的影响。
-
是的,我在编译器中使用了它们。 “未定义”未定义。你说的对。 :) 感谢您的回答。
标签: c variables floating-point int definition