博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C/C++---printf/cout 从右至左压栈顺序实例详解
阅读量:4626 次
发布时间:2019-06-09

本文共 621 字,大约阅读时间需要 2 分钟。

__cdecl压栈顺序实例

  • 明白计算:计算是从右到左计算的
  • 栈和寄存器变量:x++,是将计算结果存放到栈空间,最后是要出栈的;而++x和x是将计算结果直接存放到某个寄存器变量中(是同一个),所以计算完最后输出时,++x和x的结果总是相同的。

  用个小例子来说明下:

int x=5;   printf("%d %d\n",x,x++); int y=5; printf("%d %d\n",y++,y); int z=5; printf("%d %d %d\n",z,z++,z); int w=5; printf("%d %d %d %d\n",w,++w,w++,w); /*输出结果*/ 6 5 5 6 6 5 6 7 7 5 7 【解释说明】     从右至左计算,对于x,x++为5,压入栈中,再是x,为6,放寄存器中,然后输出,则输出6 5; 从右至左计算,对于y,先是计算y,这时值是5,放入寄存器中,然后计算y++,结果还是5,压入栈中,但是寄存器中值变了,为6, 最后开始输出。输出的话,是压入栈(y++)中的就输出对应的值,不是压入栈(y)的就都是寄存器中的值。 从右至左计算,对于z,z为5,放寄存器中,z++,还为5,压入栈中,z则为6了,寄存器值改变为6,然后输出,则输出为6 5 6; 同理可得其他的计算结果。

转载于:https://www.cnblogs.com/wft1990/p/6562215.html

你可能感兴趣的文章
zoj2319Beautiful People Dp
查看>>
图片加载 背景色块问题
查看>>
Static Binding (Early Binding) vs Dynamic Binding (Late Binding)
查看>>
搭建git服务器
查看>>
iOS之UIDynamic UI动力学使用步骤
查看>>
poj 2498 动态规划
查看>>
Windows Phone 7中使用PhoneApplicationService类保存应用程序状态
查看>>
MySql数据库的下载和安装卸载
查看>>
JDBC接口核心的API
查看>>
双缓冲技术局部更新原理之派生自View
查看>>
PPAPI插件与浏览器的通信
查看>>
用 query 方法 获得xml 节点的值
查看>>
Hello,Android
查看>>
Sublime Text 3 build 3103 注册码
查看>>
删与改
查看>>
SAP 中如何寻找增强
查看>>
spi驱动无法建立spidev问题
查看>>
ANDROID开发之SQLite详解
查看>>
如何依靠代码提高网络性能
查看>>
Zookeeper要安装在奇数个节点,但是为什么?
查看>>