首页 > 代码库 > 前置及后置++,--
前置及后置++,--
关于前置及后置++,--
a++ (temp=a,a+=1,temp) //由此看出后置++产生临时变量
++a (a+=1,a)
所以在程序中出现a++=10,(a++)++,++(a++)等试图改变后置++的值,是错误(编译错误)的
前置及后置++的用法
1.遇到逗号结束:
如:int a=10;
int c=(a++,++a,a++);
printf("%d\n",c);
在VC6中打印c的值为12,这里的(a++,++a,a++);为逗号表达式,从左向右运算,遇逗号后置++进行加法运算,运算后表达式为(10,12,12);所以c的值为12
2.遇到;结束:
printf("%d %d %d \n",a++,++a,a++); 打印11 11 10
所有的函数参数属于一条语句,不是逗号表达式,从右向左入栈
3.在宏中的使用
int a=10;
int b=10;
#define RETURN_VALUE1(a,b) (a++>b?a++:b)
#define RETURN_VALUE2(a,b) (++a>b?a++:b)
int c=0;
c=RETURN_VALUE1(a,b);
printf("%d\n",c); 打印10
c=0;
c=RETURN_VALUE2(a,b);
printf("%d\n",c); 打印11
4.在数组中的使用
int array[]={a++,++a,a++};//10,12,12
这里的表达式是逗号表达式,从左向右计算
容易出错的地方
int a=10;
a++=10;
printf("%x\n",&a++);
(a++)++;
++(a++);
++a++; //++从右向左结合,所以相当于++(a++).
以上表达式均是错的。
切记:内置类型产生的临时量具有常性,而这里的后置++产生临时量,所以不能为其赋值,取地址,或改变它的值。
printf("%d\n",a+++++b);
编译错误,因为编译器从左往右结合最长的有效运算符,a+++++b经过编译器结合后变为a++ ++ +b这显然是错的,++单目运算符,所以运算时先扫描一个操作数,而此时中间的++扫描不到一个操作数,所以出错,应将表达式改为printf("%d\n",a++ + ++b);即可。
printf("%d\n",a-----b);理由同上。
前置及后置--的使用与前置及后置++的使用相类似,所以在这里省略。
注明:这里所有的情况都是在32为操作系统下32为编译器下的情况
本文出自 “诺” 博客,请务必保留此出处http://9677503.blog.51cto.com/9667503/1586473
前置及后置++,--