扎心i++与--i

来源:互联网 发布:魅思cms视频系统 编辑:程序博客网 时间:2024/05/22 13:30

int main( )

{ int i = 0;

printf("%d %d %d", i++,--i, i++);

return 0;

}

这是一个很简单的小程序,但是他的执行结果却出乎大多数人的想法,结果为0,1,0。为什么会是这个结果,我们还得从他的汇编代码去分析。

我们可以看出在进行压参数的操作之前,先把参数遍历了一次,在遍历的过程中对函数进行处理。在执行i++时,首先将i的值取出放到一个临时量(ptr[ebp-0D0H])中保存,然后再取了一次i的值放到寄存器中,执行+1操作后再放回i里,i中的值就变成1;执行--i的时候是将i的值取出放入寄存器进行-1再放回i中,此时i的值为0;第三次的操作同第一次,i的值先保存在临时量里,再进行+1操作,i的值变成1。

之后在压参操作中,两次i++都是把临时量的值压进栈,临时量中保存的都是0;--i压的是i的值,最后i的值经历了先加后减再加变成了1,所以最后程序执行结果为0,1,0。

原创粉丝点击