c里面的++前后关系非常容易搞混,下面通过一段汇编代码 看看是怎么回事
88: i =1;
00411550 mov dword ptr [i],1
89: j = i++;
00411557 mov eax,dword ptr [i]
0041155A mov dword ptr [j],eax
0041155D mov ecx,dword ptr [i]
00411560 add ecx,1
00411563 mov dword ptr [i],ecx
90: i = 1;
00411566 mov dword ptr [i],1
91: j = ++i;
0041156D mov eax,dword ptr [i]
00411570 add eax,1
00411573 mov dword ptr [i],eax
00411576 mov ecx,dword ptr [i]
00411579 mov dword ptr [j],ecx
后++符号是等表达式结束以后才会进行++操作,而前++符号是先进行自加操作,然后进行表达式操作
00411550 mov dword ptr [i],1
89: j = i + i++;
00411557 mov eax,dword ptr [i]
0041155A add eax,dword ptr [i]
0041155D mov dword ptr [j],eax
00411560 mov ecx,dword ptr [i]
00411563 add ecx,1
00411566 mov dword ptr [i],ecx
004115BC mov dword ptr [i],1
92: j = i + ++i ;
004115C3 mov eax,dword ptr [i]
004115C6 add eax,1
004115C9 mov dword ptr [i],eax
004115CC mov ecx,dword ptr [i]
004115CF add ecx,dword ptr [i]
004115D2 mov dword ptr [j],ecx
这个例子也说了前后自加的对比,运算表达式也是自右向左进行的