【发布时间】:2021-05-22 02:00:23
【问题描述】:
请问有人能告诉我这段代码有什么问题吗?
#include <iostream>
using namespace std;
int main() {
int a[3], i;
for(i = 0; i <= 3; i++ )
{
a[i] = 0;
cout << "i = " << i << endl;
}
return 0;
}
【问题讨论】:
-
数组的索引是从 0 到 2,所以你超出了范围。将循环更改为
for(i = 0; i < 3; i++ )。 -
数组索引从零开始,具有三个元素的数组的最大索引是两个,即
a有元素a[0]、a[1]和a[2],但没有a[3]。因此,您的循环太过分了一个元素,并修改了不存在的a[3]。将循环中的结束条件从i <= 3更改为i < 3以解决该问题。 -
是什么让你觉得有些不对劲?请准确描述您遇到的问题。
-
我可能会争辩说这段代码没有任何问题,只要代码的意图是调用未定义的行为。 :) 好的,冷静下来。我的观点是,如果没有描述什么是正确的(即预期结果),就没有理由假设实际结果是错误的。这让我们回到了 cigien 的评论以及需要更多文字以使这个问题对其他人有用。
标签: c++ for-loop infinite-loop local-variables off-by-one