++x的值是(增量之后的)新值,结果是一个左值x,例如,y=++x等价于y=(x+=1);
参考一下VC6的汇编代码:
x在内存单元ebp-4,y在内存单元ebp-8
y=++x VC6下的汇编代码为:
mov edx,dword ptr [ebp-4]
add edx,1
mov dword ptr [ebp-4],edx
mov eax,dword ptr [ebp-4]
mov dword ptr [ebp-8],eax
x++的值则是x原有的值,结果是一个右值,临时变量,例如,y=x++等价于y=(t=x,x+=1,t);
y=x++ VC6下的汇编代码为:
mov eax,dword ptr [ebp-4]
mov dword ptr [ebp-8],eax
mov ecx,dword ptr [ebp-4]
add ecx,1
mov dword ptr [ebp-4],ecx
也就是说a++*2 等价于(t=a,a+=1,t)*2,先取a的值在表达式里用,然后再给a+1。也可以写成这样a*2,a++;
如果a=2,表达式结果是4,a的值是3
温馨提示:答案为网友推荐,仅供参考