for循环中的前缀和后缀增量

时间:2014-06-20 18:49:30

标签: c# post-increment pre-increment

给出以下代码

int j = 0;
for (int i = 0; i < str.Length; ++i) {
    if (i==j) {
        Console.WriteLine ("equal");
    }
    j++;
}

我希望++ii从初始0更改为1,从而将i==j评估为false

但事实并非如此。为什么呢?

4 个答案:

答案 0 :(得分:12)

如果您有for (a; b; c) { d; }形式的循环,则可以将其视为以下while循环:

a;
while(b) {
    d;
    c;
}

正如您所看到的,直到第一次迭代之后才会出现增量,无论是增量前还是后增量。

答案 1 :(得分:3)

直到第一次迭代后才会评估

++i(或第3段中的任何内容)。

无论如何,即使在if之前进行评估,它仍然无法按照您的想法运作。

执行i++++i不会改变任何内容,因为它会在使用之前进行评估。

当你像这样使用它时,真正的区别在于:

int i = 0;
if (i++ == 0) { /* True because the old value of "i" was used to compare */ }

i = 0;
if (++i == 0) { /* Not true because "i" got changed to 1 before the compare. */ }

答案 2 :(得分:2)

  • i++递增并评估(即结果,类似于returni
  • ++i递增并评估为i

语句i++;++i;是相同的,因为您不使用结果,因此唯一重要的部分是它们都增加i。在for循环中使用的方式,您将它们用作独立语句,您没有使用表达式i++ / ++i的值。

答案 3 :(得分:0)

在增量之前评估比较。前缀或后缀没有区别。