考虑这段代码:
int main()
{
int i;
int ints[3];
ints[0] = 0;
ints[1] = 1;
ints[2] = 2;
for(i = 0; (ints[i])<4 && i<3; i++)
{
printf("%d\n", ints[i]);
}
}
有什么理由不应该在循环中进行这种调节?我的意思是,当 i
变成 3
时,它会在 ints[3] 中寻找一个不存在的值吗?如果是,可以吗?因为循环无论如何都会终止?它编译并运行良好,但我只是想知道这是否存在某种隐藏的问题。谢谢。
最佳答案
在此循环的最后一次迭代中,表达式 ints[i]<4
将访问 ints[3]
.由于此访问读取了数组末尾 ints
,行为在 C 中未定义。所以是的,这不是好的代码。它可能在大部分时间都有效,但行为最终是不确定的。
关于for 循环中的条件检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23036042/