当前位置: 首页 > 知识库问答 >
问题:

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

徐欣德
2023-03-14

我在main中用C创建了一个包含10个元素的数组,并仅为其中一些元素声明了值。当打印出数组时,我注意到其中一个元素(保持不变)没有初始化为零。相反,每次都将其初始化为不同的大值(即1491389216)。然后,我注释掉了所有代码,只保留了最初声明的数组。

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

有人知道为什么会这样吗?

共有1个答案

井浩思
2023-03-14

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

如果要在声明数组时将所有元素归零,可以执行以下操作:

int arr[10] = {0};

或:

int arr[10] = {};

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

或者,只需使用memset()

int arr[10];
memset(arr, 0, sizeof(arr));

类似地,由malloc()-分配或由realloc()扩展的内存也没有初始化;使用calloc()对这些数据进行零初始化:

int *arr = (int*) calloc(10, sizeof(int));
...
free(arr);
 类似资料:
  • 根据 JLS, 数组应由零填充。但是,我面临的情况并非如此。这种行为首先发生在JDK 7u4中,也发生在所有以后的更新中(我使用64位实现)。下面的代码引发异常: 异常发生在JVM执行代码块编译之后,并且不会以标志出现。此外,语句(与此代码中的所有其他语句一样)是必要的,如果不存在异常,则不会发生。很明显,这个可能的错误与一些JVM优化有关。对于这种行为的原因有什么想法吗? 更新:< br >我在

  • 问题内容: 我这里有一个与Java有关的简单问题。假设您有一个int数组作为实例变量: 因此,现在默认情况下它包含5个零。但是,如果您具有与局部变量相同的数组,该怎么办。它是否初始化为零?那不是家庭作业,我正在学习Java语言。最好的祝福 问题答案: 首先 要了解的是, 局部变量 存储在 堆栈中 ,它们没有使用其默认值进行显式初始化。尽管 实例变量 存储在 Heap上 ,并且默认情况下会使用 默认

  • 这里有一个与Java相关的简单问题。假设您有一个int数组作为实例变量: 因此,现在默认情况下它包含5个零。但是,如果您的数组与局部变量相同,该怎么办呢。它是否初始化为零?那不是家庭作业,我正在学习Java语言。顺致敬意,

  • 本文向大家介绍C#中数组初始化与数组元素复制的方法,包括了C#中数组初始化与数组元素复制的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#中数组初始化与数组元素复制的方法。分享给大家供大家参考。具体如下: 下面的代码演示如何创建和初始化数组,以及C#中如何将数组元素从一个复制到另外一个的方法。 代码运行输出结果如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍C++ 数组初始化,包括了C++ 数组初始化的使用技巧和注意事项,需要的朋友参考一下 示例 数组只是特定类型变量的顺序存储位置的块。数组的分配方式与普通变量相同,但是在其名称后附加方括号,方括号[]中包含适合数组内存的元素数。 下面的数组示例使用typ int,变量名arrayOfInts和[5]数组可以容纳的元素数: 可以像这样同时声明和初始化数组 通过列出其所有成员来初始化数组时

  • 问题内容: 在bash中以这种方式声明数组是否会将所有数组元素初始化为0? 如果没有,如何将数组元素初始化为0? 问题答案: 您的示例将声明/初始化一个空数组。 如果要初始化数组成员,请执行以下操作: 如果要初始化具有100个成员的数组,可以执行以下操作: 请记住,bash中的数组不是固定长度的(索引也不必是连续的)。因此,除非知道数字应为多少,否则无法初始化数组的 所有 成员。