在C中,声明属于'auto-class'的变量具有初始值。这个初始值是一个垃圾值,但是,我无法理解为什么它是一个垃圾值,我也不认为我真的理解“垃圾值”的真实概念。
#include <stdio.h>
int main(void) {
int my_int;
printf("%d", my_int);
int t;
printf("%d",t);
return 0;
}
该代码导致答案为“00”,这意味着my_int
和t
的初始值为“0”。可以改变吗?
“垃圾”只是意味着该值可以是任何可能的int值。你的碰巧是零,但纯属偶然。如果您在不同的时间,或在不同的计算机,不同的编译器设置等上运行程序,它可能是其他的。
通常通过简单地在堆栈上分配空间来创建自动存储变量。也就是说,堆栈指针只需根据所需存储空间的大小进行调整,并且不会写入该位置的内存内容,因此它包含以前在最后一次使用时所包含的内存。将其初始化为特定值将要求编译器发出写入内存的代码,这需要时间 - C就是速度。如果你不告诉它写入内存,它将不会打扰。
具有自动存储持续时间的变量在初始化之前没有定义的值。他们可能(并且通常会)在他们的地址获得已经记忆的内容,但即使这样也无法保证。任何对未定义行为进行推理的尝试都是徒劳的。
至于每次运行程序时获取零值,这也会导致未定义的行为。未定义并不意味着“保证每次运行都不可预测和随机”。