连续打印“i++,--i,i++”出现的结果

来源:互联网 发布:vps安装python 编辑:程序博客网 时间:2024/05/17 19:22

首先,来一段这样的程序:

按照C语言学过的后置加加,前置减减的知识来说大多数人的思路是这样:

后置加加,先进行取值,然后自加1。所以i++打印的值为0。  后 i 值目前为1。

前置减减,先自减后取值,所以- -i打印出来的值为0。后 i 值为0

后置减减,先取值后自减,所以i++打印出来的值为0。后i 值为1。

但是实际的结果值为:


意不意外,惊不惊喜?在看到答案之余,是不是怀疑自己学错了?其实思考的是对的,只是编译器(我的是VS2013版的)给你开了一个玩笑。当时我也愣了,还以为自己的坏了,哈哈。后来进入到汇编指令之后,就明白了。接下来,一起进入反汇编指令之旅。


push是出栈指令,首先找到它出战的元素,找到它的出处。然后开始解读反汇编指令了。


顺序是黑蓝红,三色的最终指向就是最后的打印结果。至于i- -打印出1 的原因就是说,因为打印的是i的值,在整个过程中i通过寄存器进行了两次++,一次- -。所以最终的打印结果是1。旅程结束了,这就告诉我们,多敲敲代码,哈哈。