这个问题已经在这里有了答案:




7年前关闭。






看代码

#include <stdio.h>

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

输出
0 8683508

这里的“a”用“0”初始化,而“i”用“垃圾值”初始化。为什么?

最佳答案

因为这就是按照C标准的方式。原因是效率:

  • 静态变量在编译时进行初始化,因为它们的地址是已知的并且是固定的。将它们初始化为0不会产生运行时成本。
  • 自动变量可以为不同的调用使用不同的地址,并且每次调用该函数时都必须在运行时进行初始化,这可能会导致不必要的运行时成本。如果确实需要该初始化,则请求它。
  • 关于c - 为什么全局变量总是初始化为 '0',而不是局部变量? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14049777/

    10-11 22:51
    查看更多