【问题标题】:What counts as an array with no initialization?什么算作没有初始化的数组?
【发布时间】:2019-02-20 20:37:18
【问题描述】:

我不确定这两个选项:

示例 1:

const int SIZE = 4;

int numbers[SIZE] = {};  //is this array initialized?

cout << numbers[0];

示例 2:

const int SIZE = 4;

int numbers[SIZE]; // is this array initialized?

cout << numbers[0];

第二个的问题是输出是4196112。

也就是说“int numbers[SIZE] = { }”没有初始化对吧?

【问题讨论】:

  • 我不确定您认为“初始化”是什么意思,但 4196112 是数组未初始化的证据,至少未初始化为零。由于您从不为numbers 提供任何值,因此在所有这些情况下,您最好的希望就是将您的数组初始化为零。因此,如果您实际上正在初始化数组,则这些示例中不会出现 4196112..
  • 跟进我之前的评论,初始化变量有一些已知值。未初始化的变量具有不确定的值。已初始化的变量并不意味着具有非零值的变量。

标签: c++ arrays initialization


【解决方案1】:

int numbers[SIZE] = {} 执行聚合初始化,对于ints 意味着值初始化,这意味着它们都被初始化为 0。

int numbers[SIZE]; 声明了一个未初始化的ints 数组。

注意:如果数组具有静态存储持续时间,它会用零初始化,即使没有显式 = {}。

此外,聚合初始化允许您指定一些初始化器,然后将其余的初始化为零(或它们类型的默认值)。

【讨论】:

  • 除非数组是在全局范围内声明的,在这种情况下,它会用零初始化,即使没有显式的 = {} 初始化程序。
  • 我会澄清聚合初始化允许您为聚合中的元素指定值,然后对所有剩余元素进行值初始化。
  • 命名空间范围的全局范围?编辑:我相信静态和线程本地存储也被初始化为零。
  • Iff the array is declared in global scope:差不多。如果数组是“静态存储持续时间”,其中包括全局范围和函数范围内的静态变量。
  • 更新了答案。现在好点了吗?
猜你喜欢
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 2015-02-20
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
相关资源
最近更新 更多