您的位置:首页 > 其它

扎心i++与--i

2017-10-27 15:31 88 查看
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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C printf