#include <stdio.h>
int i = 4;
void main()
{
++i += i++;
printf("i=%d",i);
}
输出是什么?
看看汇编的代码
mov eax,dword ptr [i]
add eax,1
mov dword ptr [i],eax //前面实现了 ++i 此时 i的值为4,
mov ecx,dword ptr [i]
add ecx,dword ptr [i]
mov dword ptr [i],ecx //实现了 += 的运算,i = 5 ,i += i;及i= 10
mov edx,dword ptr [i]
add edx,1
mov dword ptr [i],edx //最后实现 i 自增一的运算
考察点则是 :i++ ,++i的区别
区别在于i++是i先不自加,在语句完后自加,++i先自加。此处如变成 i++ += ++i,则会发生编译问题,
错误显示 error C2106: '+=' : left operand must be l-value
此时 i++ 返回的应该寄存器里的值,并非一个可赋值的变量
而 ++i,则返回的是i。