以前一直以为是不一样的,但是在看演示发现for循环中i++跟++i结果是一样的,遂大吃一惊,打算重造一下。
总体而言,跟循环体的执行顺序有关。
首先For循环
为什么是一样的?这跟for循环执行的顺序有关。
for(表达式1;表达式2;表达式3)
{
表达式4;
}
①执行表达式1(只执行一次)。
②执行表达式2,若为真,则执行表达式4,若为假,退出执行表达式3且退出循环体。
③若满足条件,继续执行表达式2,随后表达式4,最后执行表达式3,往复执行,直到不满足表达式2条件为止。
那既然在for循环中都是一样的结果,那为什么大多写++i?
i++性能更好。
原因是i++需要先保存i当前的值然后加1,也就是说需要一个临时变量转存。而i++省去了这一部分操作。
而while跟do-while则是跟我们想法相同。
下列为两个代码块拼接而成。
int = 0;
while(i++<7) //需先判断是否满足括号里的条件,再增加,若满足则进入循环体
{
printf("%d", i);
}
while(++i<7) //先增加再判断是否满足,若满足则进入循环体
{
printf("%d", i);
}
分别执行上下两部分代码。
发现上面部分结果是:1234567
下面部分结果是:123456
跟我们的想法相同。
if语句也跟我们想法相同
但是别忘记了就算不满足条件,判断后仍需要+1.
我们来验证一下
例如 以下程序输出结果是 6
main( ) {
int m=5;
if(m++>5)printf("%d\n",m); else printf("%d\n",m--); }
第三行的m--改成m时输出5;
#include <stdio.h>
int main ()
{
int m=5;
if(m++>=6)
printf("%d\n",m);
else
printf("%d\n",m--);
printf("%d",m);
return 0;
}
结果是6 5
说明在题目中if判断m不 大于5,随后m+1,之后来到了else语句中,printf函数先把m输出后再减一。