![](/img/trans.png)
[英]FILE opening code in C. I need an explanation why this code gives different outputs when run several times
[英]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.