for 循环中的条件检查

标签 c for-loop conditional-statements

考虑这段代码:

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/

相关文章:

c++ - 使用 libpcap 进行无线数据包注入(inject)

Python3.4 : for each line in text

python - 我如何定义一个函数,如果列表中的所有项目都不同则返回 False,否则返回 True

Java 条件检查和赋值

c - 在 qemu 中测试系统调用

使用链表的循环队列

c - 检测 -nostdlib 或仅检测 stdlib 是否可用

javascript - 比较两个数组并填充缺失值

arrays - Matlab:使用逻辑索引删除 IF-ELSE 条件语句

python - 如何在 Python 中使用带有条件 while 循环的 Schedule 模块