printf下的“i++”和“i--”
来源:互联网 发布:网络四十禁书在线阅读 编辑:程序博客网 时间:2024/05/16 19:27
我们先来看一段程序代码
#include <stdio.h>void main(){ int i = 0; printf("%d %d %d", i++, i--, i++);}
以我们以往的思路分析出来结果应该是0 0 0,但是程序运行出来的结果不是这样的,而是0 1 0。这是为什么呢,我们首先看一下它的汇编代码,看它究竟是如何运行的。
009913E5 mov eax,dword ptr [i] 009913E8 mov dword ptr [ebp-0D0h],eax 009913EE mov ecx,dword ptr [i] 009913F1 add ecx,1 009913F4 mov dword ptr [i],ecx 009913F7 mov edx,dword ptr [i] 009913FA mov dword ptr [ebp-0D4h],edx 00991400 mov eax,dword ptr [i] 00991403 sub eax,1 00991406 mov dword ptr [i],eax 00991409 mov ecx,dword ptr [i] 0099140C mov dword ptr [ebp-0D8h],ecx 00991412 mov edx,dword ptr [i] 00991415 add edx,1 00991418 mov dword ptr [i],edx 0099141B mov esi,esp 0099141D mov eax,dword ptr [ebp-0D0h] 00991423 push eax 00991424 mov ecx,dword ptr [ebp-0D4h] 0099142A push ecx 0099142B mov edx,dword ptr [ebp-0D8h] 00991431 push edx
由于编译器是从后往前压参数的,所以我们首先看最后一个“i++”,由汇编代码可以看出编译器编译这一行代码时首先将内存上i的值0赋给寄存器,然后将寄存器的值0赋给临时变量,就成为这种情况: 寄存器 0 临时量 0此时输出寄存器上面的值0。其次是中间的“i--”,输出0之后对临时变量的值进行i++后临时量的值变为了1,我们将临时量的值1赋给寄存器,此时的情况为: 寄存器 1 临时量 1 此时输出寄存器上面的值1. 最后是第一个“i++”,输出1之后对临时变量的值进行i-- 后临时变量的值变为了0,将临时变量的值0赋给寄存器,此时的情况: 寄存器 0 临时量 0 此时输出寄存器上的值0。
阅读全文
0 0
- printf下的“i++”和“i--”
- 关于c++中printf 和 i++,++i的问题
- ++i, i++, printf 和 程序的可移植性 问题
- gcc 编译器中 printf i++ 和 ++i 的输出
- C++的printf(),以及++i, i++
- 从汇编角度看++i和i++(续:++i, i++, printf 和 程序的可移植性 问题)
- ++i、i++、printf函数
- ++i,i++,--i和i--的区分
- printf的(i++)和(++i)详解(编译器不同有差异)
- i++和printf不得不说的故事
- i++和++i ,i--和--i的使用方法和作用
- 对i++,i--,++i,--i深刻认识以及printf()函数打印的过程
- printf("%d,%d,%d,%d\n",i++,--i,++i,i++);编译器是如何处理的。
- printf中连续输出i++,--i,++i,i--的值如何
- 程序员面试(0):关于i++,++i,printf的例题
- 关于printf("%d,%d",i--,i++)的问题
- 关于 i++ 和 ++i i-- 和 --i 的那些事儿
- i++和++i, i--和--i的区别
- Servlet进阶1
- 酷骑单车被爆退押金难;微信现“15个句号崩溃”Bug,安卓主流机型全中招;广铁率先支持Apple Pay,但付款方式出乎意料 | 雷锋早报
- 深入理解for循环
- 计算机计算乘除法的原理
- 007_跨平台开发_MUI_按钮之普通按钮(button)
- printf下的“i++”和“i--”
- 500家国内AI企业大数据分析:产业布局与融投风云
- 英特尔发布最新自动学习芯片,有望加速人工智能的发展
- python_set()
- 以城际货运、同城物流和即时配送为例,揭秘我国2017“互联网+物流”新业态
- 现代诗歌
- 项目反思
- 搜索引擎下拉菜单 提示关键词 接口API
- Shader效果之蛛丝网迹