在我初学i++与++i这两个自增运算符时,只是很浅显的认为i++就是在运算完成之后进行i=i+1的操作,++i就是在运算进行之前i=i+1的操作,并没有深入探究他们中间的具体区别,直到最近了解到了,就在这里讲一讲。
首先来看一段代码
int i = 0;
printf("%d %d %d", i++, --i, i++);
这段代码很简单,但是如果要直接说出来答案呢?也许会思考一会,回答出0 0 0这个答案。但是实际上呢?
很令人惊奇,答案并不是我们想象的那样是三个0,具体为什么,我们来看这段代码的反汇编代码
int i = 0;
010A56C4 mov dword ptr [i],0
printf("%d %d %d", i++, --i, i++);
010A56CB mov eax,dword ptr [i]
010A56CE mov dword ptr [ebp-0E0h],eax
010A56D4 mov ecx,dword ptr [i]
010A56D7