当它没有收到命令时,行为如何?

时间:2019-06-05 08:11:15

标签: c++ for-loop

我写了一个没有任何指令的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;
}

4 个答案:

答案 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;
}