C ++:Array Elements设置为0

时间:2012-07-22 22:41:24

标签: c++ arrays

我一直在使用数组。

我有几个问题需要问。

现在我知道我不能使用数组而不给它的元素赋值。

例如,这会给我一个错误

int fly[5];
cout << fly[4] << endl;

如果我打印一个没有设定值的元素,则会出错:

int fly[5];
fly[2] = 1;
cout << fly[4] << endl;

现在我发现如果我在数组初始化中给出数组的1个元素。然后将其余元素设置为0.

所以这段代码打印0

int fly[5] = {15};
cout << fly[4] << endl;

为什么会这样。谁能解释一下?

3 个答案:

答案 0 :(得分:4)

之所以发生这种情况,是因为C ++语言标准认为它应该发生。标准说它应该发生,因为它是明智的行为,并且在您想要初始化大型数组的情况下节省大量的输入。

您的前几个示例会产生未定义的行为,因为这些数组元素的值可以是任何值,但它们不应“给出错误”。 (一个足够聪明的编译器可能会发出警告。)

答案 1 :(得分:2)

首先,您的前两个示例不保证会出错。如果他们不这样做,他们将编译并运行未定义的行为。最后一个具有明确定义的行为。如果没有为数组的每个元素指定值,则使用默认值初始化余数,在本例中为0。

答案 2 :(得分:0)

当您对数组进行大括号初始化并且初始化程序太短时,缺少的元素将进行值初始化。对于诸如int的原始类型,这意味着零初始化(即初始值为零)。例如,您可以说int a[100] = {};获得一个全零数组。但是,整数并不特殊,这也适用于默认可构造的类类型。

您的前两个示例构成了未定义的行为,因为您正在读取未初始化的变量。