在 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“ t0”。可以改变吗?
“垃圾”只是意味着该值可以是任何可能的 int 值。你的碰巧是零,但纯粹是偶然的。如果你在不同的时间运行程序,或者在不同的计算机上,不同的编译器设置等,它可能是别的东西。
自动存储变量通常是通过简单地在堆栈上分配空间来创建的。也就是说,堆栈指针仅根据所需存储的大小进行调整,并且不会写入该位置的内存内容,因此它包含上次使用时之前包含的内存。将其初始化为特定值将需要编译器发出写入内存的代码,这需要时间——C 就是关于速度的。如果您不告诉它写入内存,它就不会打扰。
具有自动存储持续时间的变量在初始化之前没有定义的值。他们可能(并且通常会)在他们的地址处获得内存中已经存在的任何内容,但即使这样也不能保证。任何对未定义行为进行推理的尝试都是徒劳的。
至于每次运行程序时获得零值,这也属于未定义的行为。未定义并不意味着“保证每次运行都是不可预测和随机的”。