c中局部变量的默认值是垃圾值,对吗?那为什么总是得到相同的输出?

use*_*102 -1 c ubuntu gcc

void func();

int main() {
  func();
  func();
  func();
}

void func() {
  int a;
  printf("%d\n",++a);
}
Run Code Online (Sandbox Code Playgroud)

当我在GCC编译器中运行此C代码时,我得到的输出为

1 
2
3
Run Code Online (Sandbox Code Playgroud)

为什么不使用static关键字就发生这种情况?

das*_*ght 5

有两种情况需要考虑:

  • 如果局部变量是static,则将其初始化为零;否则,初始值为0。static指针类型的变量设置为NULL
  • 如果局部变量是自动的,则根本不会初始化。从此类变量读取而不先分配变量是未定义的行为。