未在c中初始化时的int的默认值。 为什么我得到不同的输出?

我只是试图在c中没有初始化时检查int和char的默认值。 我的问题是,当我使用clrscr()清除2次运行之间的屏幕时,我得到两个不同的输出。有人向我解释这种行为吗? 这是代码

void main() { int i; char c; printf("%d %c",i,c); } 

输出:0

 void main() { int i; char c; clrscr(); printf("%d %c",i,c); } 

输出:-29542 //一些垃圾值,这是我在两种情况下都期待的

你不应该特别期待任何事情。 这些值是未初始化的,即:可以是任何东西

为什么第一种情况下的垃圾值与第二种情况下的垃圾值不同? 谁知道? 不同的内存映射,不同的执行路径 – 不同的垃圾。

我认为它总是给一些垃圾价值..你无法确定行为…: – /

在你的代码的情况下,你将获得垃圾值,但如果整数varibale被声明为全局,那么它的默认值将是0肯定在C中。我提到这是因为问题的标题是 – “未在c中初始化时的int的默认值”。

实际上零也是垃圾。 添加clrscr(); 你改变了堆栈,所以你做了垃圾。

在托管代码中,有默认值,通常为0或等效值。

在非托管世界中,没有默认值。 当分配内存时,系统只是告诉你“你可以在这里写下你想要的,但我不知道以前的程序让后面的混乱”。

有些人认为这种行为很糟糕,因为他们的程序由于一些模糊的原因而无法预测,但它也是一种能够尽可能多地优化内存管理的方法,想一想分配时填充的大缓冲区分配用0表示,然后用实际数据填充。 您在非托管代码中获得两倍的性能!