【问题标题】:What is the difference between these two for loops in C? [duplicate]C中这两个for循环有什么区别? [复制]
【发布时间】:2017-06-10 11:32:08
【问题描述】:
int i;
for(i = n; i --> 0;)

for(i = n; i > 0; --i)

他们产生了不同的结果。

【问题讨论】:

  • 第一个相当于for(i = n; i> 1; i--)
  • size_t i = 42; while (i --> 0) {},为什么不...
  • for(i = n; i> 1; i--) 给出的结果与第一个或第二个循环不同。
  • @Paul Ogilvie:没有人知道什么时候执行递减:它可以在之前或之后完成。没关系。重要的是后增量评估为 i原始 值。

标签: c++ c


【解决方案1】:

区别在于i实际递减的步骤,这会影响i在循环体内部看到的值。

第二个繁体版本在循环体执行后和再次检查条件之前递减i。因此,i 在为i == 1 执行循环体后达到 0。再次检查条件,循环后i为0。

第一个版本在循环体执行之前递减i,作为检查条件的一部分。这里循环体第一次以i == n - 1 运行,最后一次以i == 0 运行。然后i 递减,并将其先前的值与0 进行比较。循环退出,i 在它之后是 -1。

在传统版本中,循环体总是看到与检查条件部分相同的值。

【讨论】:

  • ..so 在循环中,i 是第一次 n-1i 是最后一次迭代 0。在循环之后,i-1
  • @PaulOgilvie - 是的,好点。为两个版本添加了 i 的最后一个值。
【解决方案2】:

对于第一个,i 在循环体执行之前 递减。第二个减少i循环体执行后。

【讨论】:

  • 我发现您的答案不完整,因为它没有在比较中讨论i 的行为(值)。
  • @PaulOgilvie 好吧,两种情况下比较中的 i 值是相同的。后缀减量表示 COMPARISON 与减量前的值 - 但由于减量现在位于循环的开头,因此循环中 i 的值不同。
  • @PaulOgilvie 比较是相同的,两个循环使用相同的值迭代 n 次。唯一的区别是循环内i 的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-14
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多