#include <stdio.h>
int main(void)
{
double a = 1234.5f;
int b = 71;
int c = 68;
int d;
printf("%d %d %d %d\n", a,b,c,d);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
0 1083394560 71 68
Run Code Online (Sandbox Code Playgroud)
在这里,为什么b给出垃圾值,而c给出b的值而d给出c的值,即使它是未初始化的?
"%d"在格式说明符期望int,但a有一个类型double,所以它是未定义的行为.
可能发生的一种可能性是,编译器将变量逐个放在堆栈上.如果在您的平台上,大小double为8个字节,并且int编译器大小的两倍会错误地假设读取值的位置.但同样,它是未定义的行为,编译器可以随意使用您的代码执行任何操作.