黑马程序员技术交流社区

标题: 关于++i和i++在for循环条件中的区别? [打印本页]

作者: 周培    时间: 2013-8-2 13:24
标题: 关于++i和i++在for循环条件中的区别?
本帖最后由 周培 于 2013-8-3 21:03 编辑
  1. for (int i = 0; i < 10; i++)
  2. {
  3.         Console.WriteLine(i);
  4. }
  5. Console.WriteLine("--------");
  6. for (int i = 0; i < 10; ++i)
  7. {
  8.         Console.WriteLine(i);
  9. }
复制代码
如上两段代码,运行的结果都是一样的,但是它们到底有什么区别呢,还是一点区别都没有?如果有区别,什么时候用++i,什么时候用i++会体现出这种区别?
作者: mzh901024    时间: 2013-8-2 14:23
i++和++i单用的时候它是一元运算符,比如a++相当于a=a+1,++a也相当于a=a+1,--i 和 i--也是如此,但是i++和++i用在表达式中,意义就不一样了,在表达式中i++是先用当前的值在表达式中,用完后在给i加1,++i在表达式中用的时候是先给当前 i 值加1,在使用i 的值在表达式中,也就是在i++在表达式中是“先用后加”,++i在表达式中是“先加后用”,,--i 和 i--也是如此
如有说的不对请谅解,我也是个初学者
作者: 周培    时间: 2013-8-2 15:17
mzh901024 发表于 2013-8-2 14:23
i++和++i单用的时候它是一元运算符,比如a++相当于a=a+1,++a也相当于a=a+1,--i 和 i--也是如此,但是i++和+ ...

嗯,谢谢!但我的主要问题是在for循环条件中,什么情况下分别要用到i++或者++i?
作者: 念念念念_、    时间: 2013-8-2 15:22
for循环如果后面没有再用到 i 是没有区别的。真要要说的话++i效率比较高i++ 相当于 tmp = i, tmp++, i = tmp++i相当于 i = i + 1
作者: 独世    时间: 2013-8-2 20:38
i++和++i只有在运算中有区别,本身没有区别,结果都是+1。
为了区分,定义成i和j
int i=3;
int j=3;
int number1=i++ +5;
int number2= ++j+5;
Console.WriteLine("number1是{0},number2是{1}",number1,number2);
Console.WriteLine("i是{0},j是{1}",i,j);
number1的结果是8,number2的结果是9,i是4,j也是4。
在式子中i++先进行运算3+5=8,然后自身再3+1=4
在式子中++j自身先3+1=4然后进行运算4+5=9

作者: 黑骏马    时间: 2013-8-3 09:12
  1. for (int i = 0; i < 5; ++i)
  2. {
  3.     for (int j = i; j == i; j++)
  4.     {
  5.         Console.WriteLine("i={0}", i);
  6.         Console.WriteLine("j={0}", j);
  7.         Console.ReadKey();
  8.     }
  9.     Console.WriteLine("ii={0}", i);
  10.     //Console.WriteLine("jj={0}", j);
  11.     Console.ReadKey();
  12. }
复制代码
通过上面的代码可以看出,无论前加还是后加,在for循环中并无特殊作用。
++i 并不会导致初始化的 i=0 改变为 i=1
原因在于
++i 或 i++ 只在复合的表达式中有区别,如楼上的例子
而在for循环中的i++或++i,虽然跟 int i=0 和 i<10 在一个括号里,但它们实际上都是各自独立的表达式(三个式子之间是用分号分隔的),++i 或 i++ 对其它语句的效果是没有区别的
for循环相当于一个while循环的简写,如下:
  1.             for (int i = 0; i < 10; ++i)
  2.             {
  3.                 Console.WriteLine(i);
  4.             }
复制代码
  1.             int i = 0;
  2.             while (i < 10)
  3.             {
  4.                 Console.WriteLine(i);
  5.                 ++i;
  6.             }
复制代码

作者: 小诺言    时间: 2013-8-3 10:14
第一个i++是先把i值赋给对象,再自加1,是先执行for下面的一段程序然后+1进行判断;第二句是先自加1,再把加后的值赋给对象,然后执行下面的一段程序,然后再比较。第一种使用的比较多,已经习惯了。也可以自己单步调试自己看,就这个程序来说是一样的。
作者: 庞海瑞    时间: 2013-8-3 18:23
在for循环中可以不考虑前自增和后自增,只是先后问题
作者: 周培    时间: 2013-8-3 20:51
结论:也就是没有啥区别,谢谢大家的回答!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2