何时在C中初始化局部变量?

Mr *_*ang 2 c

考虑下面的例子

void func(int i){
  if(i) {
    int arr[2048] = {0};
    //Doing something related to arr;
  } else {
    //Doing something
  }
}
Run Code Online (Sandbox Code Playgroud)

我在if块中有一个大数组声明。该数组的初始化应花费一些时间。我的问题是:如果i == 0,该数组是否将全部初始化?

bru*_*uno 6

如果i == 0,此数组是否会初始化?

因为你的代码是

if(i) {
  int arr[2048] = {0};
  //Doing something related to arr;
} else {
  //Doing something
}
Run Code Online (Sandbox Code Playgroud)

如果i==0无法初始化则该数组不存在,该数组仅存在于if的分支中i != 0

  • 事实并非如此。一个编译器可以一次收集所有变量,然后一次分配(并初始化)它们。另一个编译器可能会重用堆栈空间。总而言之,数组是否“存在”不是语言问题,而是编译器问题。 (3认同)