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

标签 c arrays initialization int

我在 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/

相关文章:

ruby - 如何为二维数组分配默认值?

c - "strings"声明的 gcc 数组失败

matlab - 如何自动为 fmincon 找到合适的初始值?

C struct自动初始化值,数组初始化

c - 需要对此代码进行一些解释

c - 当路径节点名称相同时,yajl_tree_get返回0

c - 不接受用户输入的其他选项

c - 如何构造一个命名列表(一个 SEXP)以从使用 .Call() 调用的 C 函数中返回?

php - 移除小于 X 的数组元素

c++ - 使用额外检查初始化 const 变量