2
在未初始化的数据段,内核初始化初始化变量为0。未初始化的数据段
但是,如果我们直接使用未初始化的变量(如int总和;以及不是int总和= 0;)并在程序中使用它,如sum = sum + n(n是任意数字),总和将取任何垃圾值。
那么为什么总和会采取任何垃圾值,如果它已被内核初始化为0?
在未初始化的数据段,内核初始化初始化变量为0。未初始化的数据段
但是,如果我们直接使用未初始化的变量(如int总和;以及不是int总和= 0;)并在程序中使用它,如sum = sum + n(n是任意数字),总和将取任何垃圾值。
那么为什么总和会采取任何垃圾值,如果它已被内核初始化为0?
你似乎在问关于编译时初始化和运行时初始化的区别。在下面的C语言代码:
int i;
int main() {
int j;
return i + j;
}
i
是全球范围的变量,因此是缺省初始化为零,这是通过将其包括在程序的数据段来实现。这将作为一个初始值块写入二进制文件,或者它将向加载程序描述块的大小,当可执行文件启动时,加载程序将用零填充它。
j
是一个局部变量,它将存在于寄存器或堆栈中。 C和C++选择不默认初始化这些值,因此如果您在不初始化它们的情况下访问它们,您将看到恰好在其寄存器/堆栈位置中的值。