前置及后置++,--

关于前置及后置++--

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为编译器下的情况


你可能感兴趣的:(--,前置及后置++)