为什么全局变量总是初始化为0,而不是局部变量?

Possible Duplicate:
07000

看到代码,

#include <stdio.h>

int a;
int main(void)
{
    int i;
    printf("%d %d\n", a, i);
}

输出

0 8683508

这里’a’用’0’初始化,’i’用’junk值’初始化。为什么?

最佳答案
因为这是它的样子,根据C标准。原因是效率:

>静态变量在编译期初始化,因为它们的地址是已知的并且是固定的。将它们初始化为0不会产生运行时成本。
>自动变量对于不同的调用可以具有不同的地址,并且必须在每次调用该函数时在运行时被初始化,从而导致可能不需要的运行时成本。如果你确实需要初始化,然后请求它。

转载注明原文:为什么全局变量总是初始化为0,而不是局部变量? - 代码日志