我写了一个没有任何指令的for循环(for语法中的指令除外)。现在,当我在方括号后立即使用分号时,i变量将按预期值停止在值4处;而如果我不使用分号,它将停止在值6处。
#include <iostream>
using namespace std;
int main()
{
int x=0;
int i;
for(i=0;i<=3;i++) //if the semicolon is absent here, value of x is 6
//if present, value of x is 4, as expected
x=x+i;
cout<<"x="<<x;
return 0;
}
答案 0 :(得分:2)
使用分号,您的代码实际上与
相同int x = 0;
int i;
i = 4;
x = x + i; // x = 0 + 4;
因为for
循环等效于
for (i = 0; i <= 3; i++) { } // sets i to 4
没有分号:
int x = 0;
int i;
i = 0; x = x + i; // x = 0 + 0;
i = 1; x = x + i; // x = 0 + 1;
i = 2; x = x + i; // x = 1 + 2;
i = 3; x = x + i; // x = 3 + 3;
for
循环等效于:
for (i = 0; i <= 3; i++) { x = x + i; }
为初学者阅读一些不错的C ++书,以了解有关语言语法的更多信息。
答案 1 :(得分:1)
这里
for(i=0;i<=3;i++)
x=x+i;
实际上与此相同:
for(i=0;i<=3;i++){
x=x+i;
}
for
后面总是需要一个语句,否则它将无法编译。为了清楚说明第二行是循环语句,通常以这种方式缩进:
for(i=0;i<=3;i++)
x=x+i;
使用分号表示的代码与此等效:
for(i=0;i<=3;i++){
; // does nothing, a so called "null statement"
}
x=x+i; // always happens once
答案 2 :(得分:1)
没有分号,您的代码等效于
for(i = 0; i <= 3; i++)
{
x = x + i;
}
使用分号时,它是单线的,并且永远不会调用x=x+i
。
这就是为什么在某些代码样式指南中,要求您始终在for中使用方括号。
答案 3 :(得分:1)
我写了没有任何说明的for循环
不,你没有。您打算在循环后使用它。 for循环始终都有一条语句。
现在,当我在方括号结尾之后立即使用分号时,i变量将按预期值停止在值4处;
;
本身就是一个语句。 {}
如果我不使用分号,它将停止在值6处。
因为它将x = x + i
评估为循环体。
与其他一些语言不同,空白不会分隔块。您可以缩进误导。应用自动格式化程序会给你类似的东西
int main()
{
int x=0;
int i;
for(i=0;i<=3;i++)
x=x+i;
cout<<"x="<<x;
return 0;
}