What is the difference between these two for loops in C?
1 2
| int i;
for(i = n; i --> 0;) |
和
它们产生了不同的结果。
- 第一个相当于for(i = n; i> 1; i--)。
- size_t i = 42; while (i --> 0) {},为什么不……
- for(i = n; i> 1; i--)给出的结果与第一个或第二个循环的结果不同。
- @保罗·奥格尔维:没人知道什么时候减刑完成了:减刑可以前后进行。没关系。重要的是,后增量评估为i的原始值。
对于第一个,在执行循环体之前,i被递减。在执行循环体之后,第二个循环体会减少i。
- 我觉得你的回答不完整,因为它没有讨论对比中i的行为(价值)。
- @Paulogilvi,在两种情况下,i的比较值是相同的。后缀减量是指与减量前的值进行比较,但由于减量现在位于循环的最前面,因此循环中的i的值不同。
- @比较是相同的,两个循环用相同的值迭代n次。唯一的区别是循环内部的i的值。
差异是实际减少i的步骤,它会影响循环体内部的i值。
第二个传统版本在执行循环体之后,在再次检查条件之前,递减i。因此,在为i == 1执行循环体后,i达到0。循环i为0后,再次检查条件。
在执行循环体之前,第一个版本会减少i,这是正在检查的条件的一部分。在这里,循环体第一次与i == n - 1一起运行,最后一次与i == 0一起运行。然后,将i递减,并将其以前的值与0进行比较。循环退出,后面的i是-1。
在传统的版本中,循环体总是看到与检查条件部分相同的值。
- 所以在循环中,i是第一次n-1和i是在最后一次迭代0中。循环后,i为-1。
- @保罗-是的,说得对。为两个版本添加了EDOCX1的最后一个值(0)。