我一直在使用数组。
我有几个问题需要问。
现在我知道我不能使用数组而不给它的元素赋值。
例如,这会给我一个错误
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;
为什么会这样。谁能解释一下?
答案 0 :(得分:4)
之所以发生这种情况,是因为C ++语言标准认为它应该发生。标准说它应该发生,因为它是明智的行为,并且在您想要初始化大型数组的情况下节省大量的输入。
您的前几个示例会产生未定义的行为,因为这些数组元素的值可以是任何值,但它们不应“给出错误”。 (一个足够聪明的编译器可能会发出警告。)
答案 1 :(得分:2)
首先,您的前两个示例不保证会出错。如果他们不这样做,他们将编译并运行未定义的行为。最后一个具有明确定义的行为。如果没有为数组的每个元素指定值,则使用默认值初始化余数,在本例中为0。
答案 2 :(得分:0)
当您对数组进行大括号初始化并且初始化程序太短时,缺少的元素将进行值初始化。对于诸如int
的原始类型,这意味着零初始化(即初始值为零)。例如,您可以说int a[100] = {};
获得一个全零数组。但是,整数并不特殊,这也适用于默认可构造的类类型。
您的前两个示例构成了未定义的行为,因为您正在读取未初始化的变量。