Rob*_*ert 4 c memory initialization
当C程序启动并将变量分配给内存位置时,C标准是否说明该值是否已初始化?
// global variables
int a;
int b = 0;
static int c;
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,'b'将被初始化为0.'a'的初始值是多少?'c'是否有任何不同,因为它对这个模块是静态的?
j_r*_*ker 11
由于您特别提到了全局变量:在全局变量的情况下,无论是否声明它们static,它们都将初始化为0.
另一方面,局部变量将是未定义的(除非它们被声明static,在这种情况下它们也将被初始化为0 - 感谢Tyler McHenry).翻译,这意味着你不能依赖它们包含任何特定的东西 - 它们将只包含该位置内存中已经存在的任何随机垃圾,这可能与运行不同.
编辑: 以下仅适用于局部变量 - 不是全局变量.
变量的初始值未定义.在某些语言中,变量在内存中的位置在声明时为零,但在C(和C++中)中,未初始化的变量将包含当时居住在该位置的任何垃圾.
因此,考虑它的最佳方式是未初始化的变量很可能包含垃圾并且具有未定义的行为.