扎心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。
阅读全文
0 0
- 扎心i++与--i
- (i++)+(i++)与(++i)+(++i)
- (i++)+(i++)与(++i)+(++i)
- (i++)+(i++)与(++i)+(++i)
- 实验:(++i)+(++i)+(++i) 与 (i++)+(i++)+(i++)
- (++i)+(++i)+(++i) 与(i++)+(i++)+(i++)表达式
- i++,i--与++i,--i 研究
- ++i *=i与 i++*= i
- ++i与i++
- i++与++i区别
- i++与++i
- C# ++ i 与 i ++
- i++与++i详解
- i++ 与++i
- i++与++i区别
- i++ 与 ++i
- ++i与i++
- ++i 与 i++
- Android热修复底层原理
- CorelDRAW弄什么封面都是很简单的事呢
- Eclipse/MyEclipse安装配置Ivy
- 基数树(radix tree)
- Java对象池技术的原理及其实现
- 扎心i++与--i
- Struts2_006_Servlet API解耦的访问方式web资源
- 洛谷10月月赛R2·浴谷八连测R3 -Chtholly-
- BeanShell
- 进程间通讯:消息队列
- windows激活原理
- caffe的matlab、python接口配置
- echarts后台与前台json数据交互问题
- 如何调试处于D状态的进程