C程序: help about variable definition sequence

标签 c variables floating-point int definition

void main()
{
    float x = 8.2;
    int r = 6;
    printf ( "%f" ,  r/4);
}

我没有明确地将 printf 函数中的 r(int 类型)类型转换为 float ,这显然很奇怪。但是,如果我更改声明 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...结果可能是错误的...但我的问题是为什么当我更改变量定义序列时结果会发生变化。对错不应该都一样吗???

为什么会这样?

最佳答案

printf 没有任何类型检查。它依赖于您自己进行检查,验证所有类型是否与格式说明符匹配。

如果您这样做,您将进入未定义行为的领域,任何事情都可能发生。 printf 函数试图根据您使用的格式说明符解释指定的值。如果它们不匹配,就会爆炸。

int 指定 %f 是无稽之谈,但您已经知道...

关于C程序: help about variable definition sequence,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9040095/

相关文章:

php 变量 $page 未正确传递到 URL

JavaScript 将 float 显示为小数点后 2 位

haskell - 非整数的模/余数函数

java - 如何快速检查 double 是否适合 float ? ( java )

c - 进程的虚拟地址空间的哪些部分是可覆盖的?

c# - 如果我有静态变量,WebServices 是无状态的吗?

c - 在程序开始时随机化#define

c# - 如何将触发器分配给 C# 中的变量?

`const char*` 会导致问题吗?

c - 在C中初始化char数组