for的标准语法是for(初始化语句;条件判断语句;修改语句);其中任何一个语句都可以不写。
比如for(;--i;)这里就没有初始化语句和修改语句。因为之前已有int i=10,初始化过了。而且--i既是条件判断语句,其中又含了递减操作,相当于修改语句。
for(;--i;)是先再i的值减1,再看i是否为0,不是则执行循环体。这样for循环会从i=10执行到i=2,共9次,i=1时,--i得到0,循环条件不成立。
基本就是楼上说的了,补充两点:
①语法概念:for(初始化表达式;条件判断表达式;循环变量增值表达式){循环体语句}
表达式和语句的区别在于有没有“;”,for语法的“;”并不是将表达式变成语句的分号。
在这个例子中, i 的 -- 运算就是循环变量增值表达式了,就是向循环结束条件转变
需要强调的是:如果循环条件的初始值为假,即便没有循环变量增值,也不会执行循环体,更不会有死循环。
②任何一个表达式都有值的,如果值是0,或者false等,条件不成立,循环结束,如果非0,继续循环。
假如i = 1,表达式 --i 的值就是0,循环条件不成立 。
for语句的一般形式为:
for(表达式1;表达式2;表达式3)
表达式1:设置初始条件。
表达式2:循环条件的表达式。
表达式3:作为循环的调整。
可省略表达式1:即不设置初值。为了正常执行循环应在for语句之前给循环变量赋初值。如for(;i<5;i++);
可省略表达式2:不设循环条件,此时程序会无限循环下去故应该在循环体设置退出条件。可用break等。
可省略表达式3:不设置循环的调整。程序无法正常结束,也会造成死循环。应该在循环体中设循环的调整。
上例为无表达式1、3。表达式1应该在for之前设置。表达式3应该循环体中设置。而表达式3(--i)是表达式故其结果是逻辑值:真(1)或假(0),当表达式3不等于假(i!=1)时就循环。
当然表达式1、2、3可以全省略。如for(;;).
祥见谭浩强的《C程序设计》。