编1:
#includeint main() { int i=0; while(i<=8,i++); printf("%d",i); return 0; }
编2:
#includeint main() { int i=0; while(i++,i<=8); printf("%d",i); return 0; }
Prog 1的输出为1,而Prog 2的输出为9。
有人可以解释一下这里发生了什么。两种代码有何不同?
逗号运算符依次评估其两个参数,并丢弃结果(最后一个除外)。最后计算的表达式确定整个表达式的结果。
i<=8,i++
-这里的表达式的值是的值i++
,它是i
递增之前的值。它为0,因此循环立即终止。
i++,i<=8
-这里的表达式的值i<=8
是仅当i
增加到9 时表达式的值才为0 。
我个人认为:第二种形式虽然与for循环有些相似,但对代码的读者来说却不如实际的for循环清楚。