我正在学习 C,并在我正在阅读的书中看到了下面列出的第一个循环。我很好奇两者之间有什么区别,因为我习惯使用第二个,即使它们返回不同的结果,也无法找出区别。
for(i = 0; i < 10; ++i){}
for(i = 0; i <= 10; i++){}
最佳答案
第一个迭代到 9
,第二个迭代到 10
。仅此而已。
前后递增操作没有区别。
为两个版本生成的未优化代码:
for(int i = 0; i < 10; ++i)
00E517AE mov dword ptr [i],0
00E517B5 jmp wmain+30h (0E517C0h)
00E517B7 mov eax,dword ptr [i]
00E517BA add eax,1
00E517BD mov dword ptr [i],eax
00E517C0 cmp dword ptr [i],0Ah
00E517C4 jge wmain+53h (0E517E3h)
{
}
for(int i = 0; i <= 10; i++)
00E517E3 mov dword ptr [i],0
00E517EA jmp wmain+65h (0E517F5h)
00E517EC mov eax,dword ptr [i]
00E517EF add eax,1
00E517F2 mov dword ptr [i],eax
00E517F5 cmp dword ptr [i],0Ah
00E517F9 jg wmain+88h (0E51818h)
{
}
因此,即使在这里,也不会有性能损失。 i++
比 ++i
慢的事实是不正确的(至少在这种情况下,它没有什么区别)。对于 int y = i++ 来说,它会更慢,但在这种情况下,两者会做不同的事情,但这里的情况并非如此。性能问题在 20 年前的编译器上可能是存在的,但现在不再是了。
关于c - 这两个 FOR 循环有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12366606/