Smo*_*iff 1 c variables floating-point int definition
void main()
{
float x = 8.2;
int r = 6;
printf ( "%f" , r/4);
}
Run Code Online (Sandbox Code Playgroud)
很明显,我没有明确地将printf函数中的r(int类型)强制转换为float.但是,如果我改变声明x和r的顺序并首先声明r然后xi得到不同的结果(在这种情况下它是一个垃圾值).我再也没有在程序中使用x ..这些是我想要错的东西......我想让它们保持原样.但是,当我执行第一段代码时,我得到157286.375011(垃圾值).
void main()
{
int r = 6;
float x = 8.2;
printf ( "%f" , r/4);
}
Run Code Online (Sandbox Code Playgroud)
如果我执行上面的代码,我得到0.000000作为结果.我知道结果可能会出错,因为我在printf中使用%f时应该是%d ...结果可能是错误的...但我的问题是当我改变变量定义序列时结果会发生变化的原因.无论是对还是错,不应该是一样的吗?
为什么会这样?
printf没有任何类型检查.它依赖于您自己进行检查,验证所有类型都与格式说明符匹配.
如果你不这样做,你就进入了未定义行为的领域,任何事情都可能发生.该printf函数试图根据您使用的格式说明符来解释指定的值.如果他们不匹配,繁荣.
指定%f一个是无稽之谈int,但你已经知道......