运行以下代码时,输出为2 4 6.我预计它为2 5,依此类推...... 为什么会有差异?
#include <iostream>
using namespace std;
int main() {
static int i;
for (i++; ++i; i++) {
printf("%d ", i);
if (i == 6)
break;
}
return 0;
}
<小时/> 在第二次迭代中,我在这里做了同样的事情,没有
for
循环。结果是5。
为什么?
#include <iostream>
using namespace std;
int main() {
static int i=2;
i++;
i++;
cout<<++i;
return 0;
}
答案 0 :(得分:2)
每次遍历循环时,你将i
增加2,而不是3(我猜你预计会发生后者)。
一般情况下
for ( init_statement ; condition ; iteration_expression ) {
loop_statements
}
相当于
init_statement
for ( ; condition ; ) {
loop_statements
iteration_expression
}
和
init_statement
while ( condition ) {
loop_statements
iteration_expression
}
请参阅,例如this。
在你的情况下,
for (i++; ++i; i++) {
...
}
相当于
i++
for ( ; ++i; ) {
...
i++
}
和
i++
while ( ++i ) {
...
i++ ;
}
至于你的第二段代码,你提到“结果是5”。看起来你不希望这样,也许4.如果是这样,试着替换
cout<<++i;
与
cout<<i++;
(在句子中的其他操作之前与之后递增)。
答案 1 :(得分:0)
当您看到for循环的语法
时 for(initialize;condition;inc/decrement)
初始化块中的语句仅在for循环开始时执行一次,这就是为什么它将i递增2的原因。
希望有帮助
答案 2 :(得分:0)
在for
循环中,你有4个部分。我忘记了各个部分的“官方”名称,但我通常称它们为:
有效地:
for(Initialization (1); Anchor Statement (2); Follow-up (4))
{
Body (3)
}
它将按以下顺序命中:
1,2,3,4,[2,3,4] ......直到第2步评估为false
或break
语句被命中。然后退出。
所以i
以0
开头。
您点击了第1步和第2步,在步骤3(正文)中i
评估为2
。
然后,您点击步骤4和2,在步骤3中将i
评估为4。
然后您点击步骤4和2,在步骤3中将i
评估为6.
然后你有一个break
语句将退出循环。
似乎是混乱的重要部分是初始化步骤只运行一次。