for循环中的前缀和后缀自增
本文关键字:后缀 前缀 循环 for | 更新日期: 2023-09-27 18:09:40
给定以下代码
int j = 0;
for (int i = 0; i < str.Length; ++i) {
if (i==j) {
Console.WriteLine ("equal");
}
j++;
}
我预计++i
会将i
从初始的0
变为1
,从而i==j
被求值为false
。
但事实并非如此。为什么?
如果你有一个形式为for (a; b; c) { d; }
的循环,你可以把它当作以下while
循环:
a;
while(b) {
d;
c;
}
正如您所看到的,增量直到第一次迭代之后才会发生,无论它是前增量还是后增量。
++i
(或第三段中的任何内容)将在第一次迭代之后才被计算。
无论如何,即使它在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. */ }
-
i++
递增并求值为(即结果与return
相似)i
的旧值 -
++i
递增并求值为i
的新值
语句i++;
和++i;
是相同的,因为您不使用结果,所以唯一重要的部分是它们都增加i
。在for
循环中使用,您使用它们作为独立语句,您不使用表达式i++
/++i
的值。
比较在递增之前求值。前缀或后缀没有区别