下面看几个例子 #include main() { int a=0; printf("a=%d\n",a++); printf("a=%d\n",a); } ++在后,所以是先运算后递增,第一个a++ 相当于 a=a+1 也就是 a=0+1 此时的a本来就是0 所以第一个a结果是a=0,也就是=后面的那个a 运算后,a=1,也就是递增后的结果,所以第2个结果是a=1,=号前面的那个a #include main() { int a=0; printf("a=%d\n",++a); printf("a=%d\n",a); } ++在前 ,后递增再运算 ++a 也等于a=a+1 递增结果为a=1 运算结果也是a=1 所以两个a都是a=1 以下的程序就不说原因了,大家自己想 #include main() { int a=0; a++; printf("a=%d\n",a++); printf("a=%d\n",a); } 结果为a=1,a=2 #include main() { int a=0; a++; printf("a=%d\n",++a); printf("a=%d\n",a); } 结果a=2,a=2 #include main() { int a=0; ++a; printf("a=%d\n",a++); printf("a=%d\n",a); } 结果a=1,a=2 #include main() { int a=0; ++a; printf("a=%d\n",++a); printf("a=%d\n",a); } 结果a=2,a=2 a++和++a你们有些应该有点晕了吧 让我们用数学运算在了解一次 int a=0,b=3; a=(b++)+(b++)+(b++); ++在后是先运算后自加 所以先运算 a=3+3+3 结果a=9 然后b再自加,自加3次,所以b=6 int a=0,b=3; a=(++b)+(++b)+(++b); ++在前是先自加后运算 自加3次 先自加 b+1=4 存到第一个b里 b此时是4 再自加 b+1=5 存到第二个b里 b此时是5 再自加 b+1=6 存到第二个b里 b此时是6 结果a=4+5+6 a=15 b=6 注意在VC6.0编译器,这里的结果是a=16,b=6 有的编译器结果还是这样 a=6+6+6=18 a=18 所以根据编译器的不同结果也会不同,只限制为++在前的多运算,这个你也不需要太困惑,++在前的多运算我们很少用到 #include main() { int a=0,b=3; a=(b++)+(b++)+(b++); printf("a=%d\n",a); printf("b=%d\n",b); a=0,b=3; //变量a重新归零,b重新归3 a=(++b)+(++b)+(++b); printf("a=%d\n",a); printf("b=%d\n",b); } 结果a=9 b=6 a=16 b=6 如果 int a=1,b=2,c; c=a++*b 结果是多少? c=a++*b可以看成c=(a++)*b 等于 a*b a++ ++在后先参与运算后递增 先a*b 后a++ 结果c=2 c=++a*b 可以看成c=(++a)*b 等于 ++a a*b ++在前先递增后参与运算 先++a 后a+b 结果c=4 下面是程序: #include main() { int a=1,b=2,c=0; c=a++*b; printf("c=%d a=%d\n",c,a); a=1,b=2,c=0; c=++a*b; printf("c=%d a=%d\n",c,a); a=1,b=2,c=0; c=a++*b++; printf("c=%d a=%d b=%d\n",c,a,b); a=1,b=2,c=0; c=++a*++b; printf("c=%d a=%d b=%d\n",c,a,b); 补充 :a--和--a的用法也是一样的 ++和--运算符非常高效,++和--编译后值生成一条语句,而用+1或-1进行加1或减1不会总是这么高效 |
| 本文出处: http://www.52bcx.com/Program/c/hx/list_12_2.html |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|