对于c程序中的循环混淆

Man*_*dhu 2 c for-loop

为什么循环从2运行到7?

int i;    
for(i=1;i<=6;printf("\n%d\n",i))    
i++;
Run Code Online (Sandbox Code Playgroud)

这个的输出是

2
3
4
5
6
7
Run Code Online (Sandbox Code Playgroud)

但限制i是6.

Sou*_*osh 8

for循环的语法是

for ( 第1条 ; 表达式-2 ; 表达式-3 ) 语句

执行如下,引用C11第6.8.5.3章,(强调我的)

表达式expression-2在每次执行循环体之前计算的控制表达式.在每次执行循环体后,表达式expression-3被计算为void表达式.[....]

在这里,i++是身体,printf("\n%d\n",i)表达式-3.

所以,执行的顺序就像是

 i = 1;
 start loop

    i < = 6          //==> TRUE
    i++;            //i == 2
    printf         // Will print 2    ///iteration 1  done

    i < = 6         //==> TRUE
    i++;           //i == 3
    printf        // Will print 3   ///iteration 2  done
    .
    .
    .
    i < = 6         //==> TRUE
    i++;           //i == 6
    printf        // Will print 6   ///iteration 5  done

    i < = 6         //==> TRUE
    i++;           //i == 7
    printf        // Will print 7   ///iteration 6  done

    i < = 6 ==> FALSE

 end loop.
Run Code Online (Sandbox Code Playgroud)