最新消息:点击查看大S的省钱秘笈

C/C++语言中 i++ 和 ++i 有什么区别?

编程相关 Slyar 1056浏览 0评论

文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。

今天有同学问C语言中for循环里那个 i++ 和 ++i 是否有区别,我告诉他在for循环中是没有区别的,现在具体说一下 i++ 和 ++i 的区别。

不管是前置自增还是后置自增,结果都是0-9,没有任何区别

但是,++i更快,因为编译器不需要保存一个临时变量保存i,当你做一个非常非常非常大的循环的时候,可能会体会到这一点速度差异

下面再看2段代码

前置自增:

后置自增:

结果很明显

i++  :先引用后增加,先在i所在的表达式中使用i的当前值,后让i加1

++i  :先增加后引用,让i先加1,然后在i所在的表达式中使用i的新值

转载请注明:Slyar Home » C/C++语言中 i++ 和 ++i 有什么区别?

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (31)

  1. 反了??
    +++4年前 (2013-04-30)回复
  2. int i=5,a=7,b=9 , c = 0, d=0; c = ++a + ++ i + b++ + ++i + a++ + ++b + ++i; @小意 @小意
    匿名4年前 (2012-07-20)回复
  3. int i=5,a=7,b=9; 求:++a+++i+b+++++i+a+++++b+++i=????
    小意5年前 (2012-06-05)回复
  4. int x=3,y=2,z=1; printf(“%d,%d\n”,(++x,y++),z+2); 运行结果是2, 3 那这里的(++x,y++)是什么意思
    ..5年前 (2012-04-07)回复
  5. 其实估计困惑的是:++i;cout<<i; 和 i++;cout<<i;与j=++i;cout<<j;和j=i++;cout<<j;编译输出的结果不同,理解这个就明白了,前面结果都一样,后面的不同。
    飞鱼5年前 (2012-03-23)回复
  6. felix021 回复: 十月 6th, 2008 at 20:50 这个你需要去了解一下“匿名变量”... 貌似是这样的: ++i 自增一次,然后返回自身的值 i++ 创建一个匿名变量,自增一次,返回匿名变量的值 如果你能把++运算符看成一个函数,那么会更好理解一点。 //++i int operator ++(int &i){ i = i + 1; return i; } //i++ int operator ++ (int &i){ int j = i; i = i + 1; return j; } 这个好精辟!顶!
    游客5年前 (2011-09-05)回复
  7. @scorpio 没错
    Slyar6年前 (2011-06-09)回复
  8. i++ 和 ++i 都是由汇编指令引申而来的 ++i : i的值直接自加1, 没有额外的空间损耗 i++ : i的值直接自加1, 但会开辟一个额外的空间存储i的值. 大概是因为需要为左值赋值吧 这大概就是提倡用++i, 而不用i++的原因吧
    scorpio6年前 (2011-06-09)回复
  9. 后天就要去过二级,求解。
    yaya6年前 (2011-03-24)回复
  10. 其实俺还是不太明白,以前我拿到这个c语言教材就不明白这个为什么是i++,今天我再来看到i++的时候就觉得i++为什么不是++i。 看了你上面的文章,俺还是觉得循环中的i++为什么会是对的?int i=0; while (i<10){ printf("www.slyar.com"); i++; } 中,i++这个自加按照i++教材中的意思,应该是后来才加一的,但是这个程序中,i是在什么时候+1的?++i好说啊,当时就加了,i++是怎样的过程,难道还是跳出while语句回到while表达式的时候才加的?
    yaya6年前 (2011-03-24)回复
  11. 最近在学习C语言,I++是先运算在+吧,++I是先加,在运算。
    Dianso7年前 (2009-11-11)回复
  12. 以后我也跟代码混了..
    Kin8年前 (2009-01-13)回复
  13. 这个也太基本了吧,另外你的博客不错啊。
    子非鱼8年前 (2008-09-30)回复
    • 呃。。。有同学问么,新学C语言。。。
      Slyar8年前 (2008-09-30)回复
  14. 到底有什么区别啊。??
    最牛逼的博客8年前 (2008-09-30)回复
  15. 。。。。。。JAVA挺好的啊
    joe8年前 (2008-09-29)回复
  16. 学了C++,java学起来一点压力都没有的!
    joe8年前 (2008-09-29)回复
    • 呵呵,我晓得,不过不知道为什么,我就是看java不爽。。。
      Slyar8年前 (2008-09-29)回复
    • 我也不喜欢Java,不过我们还是得学。囧。
      felix0218年前 (2008-10-06)回复
  17. 电子商务啊,要学JAVA的,C跟JAVA太象了
    joe8年前 (2008-09-29)回复
    • 呃。。。貌似我们也得学JAVA。。。
      Slyar8年前 (2008-09-29)回复
  18. 以前老师经常拿这个考我们,所以很熟悉。+号先出现就是先自加!后出现就后自加
    JOE8年前 (2008-09-29)回复
    • 嘿嘿,JOE是学啥的?
      Slyar8年前 (2008-09-29)回复
  19. 这个讲的也太清楚了 不懂编程的都学会了 博主是什么系的
    zonghua8年前 (2008-09-29)回复
  20. ++i 比 i++更快
    felix0218年前 (2008-09-28)回复
    • 这个是在循环中还是所有的都这样?
      Slyar8年前 (2008-09-29)回复
    • 这个你需要去了解一下“匿名变量”... 貌似是这样的: ++i 自增一次,然后返回自身的值 i++ 创建一个匿名变量,自增一次,返回匿名变量的值 如果你能把++运算符看成一个函数,那么会更好理解一点。 //++i int operator ++(int &i){ i = i + 1; return i; } //i++ int operator ++ (int &i){ int j = i; i = i + 1; return j; }
      felix0218年前 (2008-10-06)回复
      • 恩恩,貌似是这样的。。。 那个匿名变量在哪里工作?内存还是寄存器?
        Slyar8年前 (2008-10-06)回复
    • 只是一个变量而已,变量都是存在内存中的。
      felix0218年前 (2008-10-24)回复