2

我已经使用数组一段时间了。

我有几个问题需要问。

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

例如,这会给我一个错误

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;

为什么会发生这种情况。谁能解释一下?

4

3 回答 3

4

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

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

于 2012-07-22T22:46:50.070 回答
2

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

于 2012-07-22T22:46:33.197 回答
0

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

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

于 2012-07-22T23:11:50.647 回答