今天有同学问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的新值
我想这样说大家就应该明白了。。。
以下评论值得注意:
++i 比 i++更快
Slyar 回复:
九月 29th, 2008 at 15:24
这个是在循环中还是所有的都这样?
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;
}
Slyar 回复:
十月 6th, 2008 at 21:16
恩恩,貌似是这样的。。。
那个匿名变量在哪里工作?内存还是寄存器?
felix021 回复:
十月 24th, 2008 at 22:16
只是一个变量而已,变量都是存在内存中的。