首页 > 编程相关 > C语言中 i++ 和 ++i 有什么区别?

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

2008年9月28日 20:49 Slyar 发表评论 阅读评论

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

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

我们先用while语句写一下 for(i=1;i<10;i++)

int i=0;
while (i<10){
printf("www.slyar.com");
i++;
}

用while语句写一下 for(i=1;i<10;++i)

int i=0;
while (i<10){
printf("www.slyar.com");
++i;
}

可以看到,最后i的值都是10,所以在for循环里,i++ 和 ++i 是没有区别的,那么区别在哪里呢?

现在我们再看一段程序:

#include<stdio.h>
int main(){
int i,x;

i=1;
x=1;
x=i++; //这里先让X变成i的值1,然后i加1
printf("%d ",x);

i=1;
x=1;
x=++i; //这里先让i加1,然后让X变成i的值2
printf("%d ",x);

system("pause");
return 0;
}

试着运行一下这段程序,发现结果是 1 2 ,这就是 i++ 和 ++i 的区别了:

i++  :先引用后增加

++i  :先增加后引用

具体是什么意思呢?就是

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

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

我想这样说大家就应该明白了。。。

分类: 编程相关 标签:
  1. Dianso
    2009年11月11日22:38 | #1

    最近在学习C语言,I++是先运算在+吧,++I是先加,在运算。

  2. Kin
    2009年1月13日18:13 | #2

    以后我也跟代码混了..

  3. 2008年9月30日19:47 | #3

    这个也太基本了吧,另外你的博客不错啊。

    Slyar 回复:

    呃。。。有同学问么,新学C语言。。。

  4. 2008年9月30日11:06 | #4

    到底有什么区别啊。??

  5. 2008年9月29日18:29 | #5

    。。。。。。JAVA挺好的啊

  6. 2008年9月29日18:01 | #6

    学了C++,java学起来一点压力都没有的!

    Slyar 回复:

    呵呵,我晓得,不过不知道为什么,我就是看java不爽。。。

    felix021 回复:

    我也不喜欢Java,不过我们还是得学。囧。

  7. 2008年9月29日17:57 | #7

    电子商务啊,要学JAVA的,C跟JAVA太象了

    Slyar 回复:

    呃。。。貌似我们也得学JAVA。。。

  8. 2008年9月29日12:08 | #8

    以前老师经常拿这个考我们,所以很熟悉。+号先出现就是先自加!后出现就后自加

    Slyar 回复:

    嘿嘿,JOE是学啥的?

  9. 2008年9月29日07:31 | #9

    这个讲的也太清楚了 不懂编程的都学会了 博主是什么系的

    Slyar 回复:

    计算机系。。。

  10. 2008年9月28日23:46 | #10

    ++i 比 i++更快

    Slyar 回复:

    这个是在循环中还是所有的都这样?

    felix021 回复:

    这个你需要去了解一下“匿名变量”...
    貌似是这样的:
    ++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;
    }

    Slyar 回复:

    恩恩,貌似是这样的。。。

    那个匿名变量在哪里工作?内存还是寄存器?

    felix021 回复:

    只是一个变量而已,变量都是存在内存中的。

bnuep:0801010047