【正确答案】
【答案解析】以++操作为例,对于变量a,++a表示取a的地址,增加它的内容,然后把值放在寄存器中;a++表示取a的地址,把它的值装入寄存器,然后增加内存中a的值。
一般而言,当涉及表达式计算时,对这两种情况的计算过程区分如下:后置的++运算符是先将其值返回,然后其值增1;而前置的++运算符,则是先将值增1,再返回其值。程序示例如下:
#include<stdio.h>
int main()
{
int a,b,c,d;
a=10;
b=a++;
c=++a;
d=10*a++;
printf("%d/n%d/n%d/n%d/n”,a,b,c,d);
return 0;
}
程序输出为
13
10
12
120
上例中,首先赋值a为10,然后执行b=a++语句,由于后置操作符的特性,所以首先执行b=a操作,即b的值为10,然后执行a的自增操作,a的值变为11。紧接着执行c=++a语句,由于后置操作符的特性,所以首先执行a的自增操作,a的值变为12,然后执行c=a这一赋值操作,所以c的值变为12。当执行d=10*a++语句时,由于++操作符的优先级大于*操作符,所以该语句等价于d=10*(a++);由于是后置操作符,所以首先执行赋值语句,d的值变为10*12,即为120,然后a执行自增操作,变为13,所以最终a、b、c、d的值分别变为13、10、12、120。
再如,首先定义int a=4,然后分别执行以下5种情况:
1)a+=a++;
2)a+=++a;
3)++a+=a;
4)++a+=a++;
5)++a+=++a;
在VC 6.0的环境下执行以上代码,第1)种情况下,a的值变为9;第2)种情况下,a的值变为10;第3)种情况下,a的值变为10;第4)种情况下,a的值变为11;第5)种情况下,a的值变为12。
需要注意的是,对于迭代器和其他模板对象使用前缀形式(++i)的自增、自减运算符,一般推荐使用前置自增运算,因为前置自增(++i)通常要比后置自增(i++)效率更高。