int 数组元素未在 C 中初始化为零

Pat*_*vis 2 c arrays int initialization

我在 C 中创建了一个包含 10 个元素的数组,main并仅为某些元素声明了值。打印出数组时,我注意到其中一个未受影响的元素没有初始化为零。相反,它每次都被初始化为一个不同的大值(即1491389216)。然后我注释掉了我的所有代码,并像我最初声明的那样离开了数组。

运行代码时,数组的前 8 个元素被初始化为零,数组中的第 9 个元素被初始化为一个大值(如1491389216),每次都改变,最后一个元素始终被初始化为相同的非-零号。

有谁知道为什么会这样?

Rem*_*eau 5

除非您显式初始化它们,否则不会初始化本地(自动)数组。否则它们包含任何已经占用内存的随机数据。

如果要在声明数组时将所有元素清零,可以这样做:

int arr[10] = {0};
Run Code Online (Sandbox Code Playgroud)

或者:

int arr[10] = {};
Run Code Online (Sandbox Code Playgroud)

取决于您的编译器(GCC 允许这样做,除非您指定-pedantic)。

或者,只需使用memset()

int arr[10];
memset(arr, 0, sizeof(arr));
Run Code Online (Sandbox Code Playgroud)

类似地,由malloc()——或扩展realloc()——分配的内存不会被初始化;用于calloc()对此类数据进行零初始化:

int *arr = (int*) calloc(10, sizeof(int));
...
free(arr);
Run Code Online (Sandbox Code Playgroud)