本来没有去想过这个问题,后来看到别人的代码中有人用++i,而我自己的习惯是一直用i++,还没有想过有这样子的写法。那这两种写法中有什么不同吗?
在C语言的书里面,说的是i++这种写法,要i的值使用过之后才会递加,相当于:i=i;++i;而++i相当于:i=i+1;第一次使用就开始做递加运算。那在for循环里,i这个变量又是怎么回事呢?第一次使用i这个变量该从何算起?C语言的书上又说了:i++或++i这个语句在每次循环迭代时执行。但是这句话好像也没有说明白是什么时候进行迭代的,是一开始就进行迭代,还是循环到最后进行迭代。于是,我开始写一个程序来试验一下:
图1
运行结果如下:
图2
结果竟然是一样的?!我又开始做另外一个实验来试证这个结果是不是只存在于这种特殊的情况
之下。
图3
运行结果如下:
图4
这时候终于看出差别来了。
这样子,基本上可以得出我们想要知道的规律了。如果你还是不明白,那我就让每一步的运算结果都让它显示出来好了。
图5
运行结果如下:
图6
这样子应该就简单明了了吧,这样子还看不懂我也没有办法了。
下面,我来总结一下规律吧:
其实:Count+=i++相当于:Count=Count+i;++i;这两个语句。而这个Count+=i++;这个语句是要在一个循环结束后才进行的。所以有人会发现:图4和图6的结果是不一样的,那是因为程序也不太一样,一个在for后面加了“;”所以这就可以证明:Count+=i++;这个语句是要在一个循环结束后才进行的。而i=0;这一个赋初始值是不能够看成是进行了变量的使用的。
我们来算一下Count的运算结果:
i=0;然后进行判断:i<10为真;进行循环体里面的程序:打印,这时候显示就会是:Count=0,i=0;这是这两个变量的初值;然后进行:Count=Count+i;++i;所以得到Count=0+0;i=1;这时候再对i<10进行判断为真;打印:此时Count还是等于0因为还是在显示上一次的运算结果;而i=1;这时候会进行第二次运算:Count=0+1;i=2;这时候再对i<10进行判断为真;打印上一次运算的结果;依此类推;
下面再来算一下Total的运算结果:
i=0;然后进行判断:i<10为真;进行循环体里面的程序:打印,这时候显示就会是:Count=0;i=0;然后进行Count+=++i;这个相当于:Count=Count+(++i);所以:Count=0+1=1;i=1;因为++i是第一次就开始对i这个变量直接进行递加运算,不需要使用过一次之后再进行递加。这就是i++和++i的区别。然后对i<10进行判断为真:打印上一次的运算结果:Count=1;i=1;然后依此类推。
这就是有关于for循环中i++和++i的区别,写得不好,希望大家可以理解。