繁体   English   中英

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

[英]Default values of int when not initialized in c. why do i get different outputs?

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

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在全局中声明,那么在C中肯定将其默认值设为0。我提到了这一点,因为问题的标题是-“未在c中初始化时int的默认值”。

我认为它总是给一些垃圾值..你不能确定行为...:-/

实际上,零也是垃圾。 添加clrscr(); 您更改了堆栈,所以您做了垃圾处理。

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

在非托管环境中,没有默认值。 分配内存后,系统只会告诉您“您可以在此处编写所需的内容,但我不知道先前程序留下的混乱情况”。

对于某些人来说,这种行为很糟糕,因为他们的程序由于某些晦涩的原因而无法预测,但是这也是一种能够尽可能优化内存管理的方法,考虑到大缓冲区分配,当分配时该缓冲区将被填充为0,然后填充实际数据。 在非托管代码中,您可以获得两倍的性能!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM