为什么全局variables总是初始化为“0”,而不是局部variables?
可能重复:
为什么全局variables和静态variables初始化为默认值?
看代码,
#include <stdio.h> int a; int main(void) { int i; printf("%d %d\n", a, i); } 产量
 0 8683508 
这里'a'用'0'初始化,但'i'用'垃圾值'初始化。 为什么?
因为就是这样,根据C标准 。 其原因是效率:
- 
静态variables在编译时被初始化,因为它们的地址是已知的并且是固定的。 将它们初始化为 0不会产生运行时成本。
- 
自动variables对于不同的调用可以具有不同的地址,并且每次调用函数时都必须在运行时进行初始化,从而产生可能不需要的运行时间成本。 如果你确实需要这个初始化,然后请求它。 
  globalvariables和staticvariables在初始化时被存储在数据段(DS)中,并且在未初始化时被块(BSS)初始化。 
这些variables具有固定的内存位置,并且在编译时分配内存。
 因此, global和staticvariables的默认值为'0' 。 
  autovariables存储在堆栈中,而没有固定的内存位置。 
 内存在运行时分配给autovariables,而不是在编译时。 因此, autovariables的默认值为垃圾。 
你已经select了简单的variables,但是要考虑:
 void matrix_manipulation(void) { int matrix1[100][100]; int matrix2[100][100]; int matrix3[100][100]; /* code to read values for matrix1 from a file */ /* code to read values for matrix2 from a file */ /* code to multiply matrix1 by matrix2 storing the result in matrix3 */ /* code to use matrix3 somehow */ } 
如果系统将数组初始化为0,则努力将被浪费; 初始化由函数的其余部分覆盖。 C尽可能避免隐藏成本。
 全局variables在main函数启动之前被分配和初始化,而当程序运行时,局部variables在堆栈上生成。