如果我运行此程序:
#include <stdio.h>
int main()
{
int a=32,b=2,c,i;
for(i=0;i<3;i++){
printf("%d\n",c);
c=a/b;
a=c;
}
return 0;
}
输出为:
32765
16
8
在这里,我没有定义C的值,此输出32765从何而来? 即使我再次运行此代码更多的时间,它显示不同的值,如32764,32767。为什么显示此不同的输出?
答案 0 :(得分:1)
由于c
具有自动存储期限(即是一个非静态的局部变量)且未初始化,因此其值为不确定。尝试打印从未使用其地址(即不是地址操作符&
的主题)的未初始化变量会调用undefined behavior。
即使您确实使用了c
的地址,但如果它包含陷阱表示形式,您仍然可能会有未定义的行为。如果它不包含陷阱表示(大多数实现中都没有),则该值为 unspecified (未指定),这仅意味着无法预测打印出的值。
答案 1 :(得分:0)
没有明确的初始化程序的自动变量(当程序流进入并离开变量的作用域时会自动分配和释放的局部变量)具有未定义(即垃圾)值。