- 论坛徽章:
- 0
|
int x = 5;
x = x++
结果是x = 5,我看到的一个解释是先把寄存器中x的值放回内存,然后寄存器中的值加1,所以内存中的x还是原来的值。
但下面这个我就不明白了
int x = 5;
x = x+++2;
结果是x = 8,其执行过程我觉得应该是将寄存器中的x加2然后放回内存,最后寄存器中的值加1,没有放回内存就像上面一样,结果应该为7啊。
谁能给详细的讲解一下呢?
0x08048391 <main+17>: movl $0x5,-0xc(%ebp) // int x =5;
0x08048398 <main+24>: incl -0xc(%ebp) // x = x++;
0x0804839b <main+27>: movl $0x5,-0xc(%ebp) // x = 5;
0x080483a2 <main+34>: addl $0x2,-0xc(%ebp)
0x080483a6 <main+38>: incl -0xc(%ebp) // x = x++ + 2;
所以楼主看到的解释是胡说八道。
x = x++; => x = x, x = x + 1;
x = x++ + 2; => x = x + 2, x = x + 1; |
|