我在 main
中用 C 语言创建了一个包含 10 个元素的数组,并只为其中一些元素声明了值。打印数组时,我注意到其中一个未被触及的元素未初始化为零。相反,它每次都被初始化为一个不同的大值(即 1491389216
)。然后,我注释掉了我的所有代码,并保留了我最初声明的数组。
当运行代码时,数组的前 8 个元素被初始化为零,数组中的第 9 个元素被初始化为一个很大的值(如 1491389216
),并且每次都会改变,并且最后一个元素始终被初始化为相同的非零数字。
有人知道为什么会这样吗?
最佳答案
本地(自动)数组不会被初始化,除非你明确地初始化它们。否则它们包含已经占用内存的任何随机数据。
如果你想在声明数组时将所有元素归零,你可以这样做:
int arr[10] = {0};
或者:
int arr[10] = {};
取决于您的编译器(GCC 允许这样做,除非您指定 -pedantic
)。
或者,只需使用 memset()
代替:
int arr[10];
memset(arr, 0, sizeof(arr));
类似地,由 malloc()
分配的内存——或由 realloc()
扩展的内存——没有被初始化;使用 calloc()
对此类数据进行零初始化:
int *arr = (int*) calloc(10, sizeof(int));
...
free(arr);
关于c - int 数组元素未在 C 中初始化为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41658072/