我正在准备 C + + 入门考试的期末考试。我们的教授给了我们这个练习题:
解释为什么代码产生以下输出:
120 200 16 0
using namespace std;
int main()
{
int x[] = {120, 200, 16};
for (int i = 0; i < 4; i++)
cout << x[i] << " ";
}
这个问题的样本答案是:
Cout 语句只是循环遍历数组元素,数组元素的下标是由 for 循环的增量定义的。元素大小不是由数组初始化定义的。For 循环定义数组的大小,该数组恰好超过初始化元素的数量,因此最后一个元素的默认值为零。第一个 for 循环打印元素0(120) ,第二个 for 循环打印元素1(200) ,第三个循环打印元素2(16) ,第四个循环打印默认数组值0,因为元素3没有初始化。此时,i 现在超出了条件,for 循环终止。
我有点困惑,为什么数组外的最后一个元素总是“默认”为零。为了进行试验,我将问题的代码粘贴到 IDE 中,但是将 for 循环更改为 for (int i = 0; i < 8; i++)
。然后输出改为 120 200 16 0 4196320 0 547306487 32655
。为什么在尝试从定义大小之外的数组中访问元素时没有错误?程序是否只输出上次保存到该内存地址的“剩余”数据?