复习基础知识: i++ 和 ++i 在语句的的执行顺序
2013-01-15 20:25
399 查看
请先看下题: 下面两句调用 test 函数后面的注释正确吗??
如果你认为这样的话, 那看一下对应的汇编代码:
int i = 0; // 定义并初始化变量
mov dword ptr [i],0
test(i++);
mov eax,dword ptr [i]
mov dword ptr [ebp-0DCh],eax // dword ptr [ebp-0DCh] 这个相当于临时变量
mov ecx,dword ptr [i]
add ecx,1 // 关注这句
mov dword ptr [i],ecx
mov edx,dword ptr [ebp-0DCh]
push edx
call test (10611B3h) // 关注这句
add esp,4
int j = 0;
mov dword ptr [j],0
test(++j);
mov eax,dword ptr [j]
add eax,1 // 关注这句
mov dword ptr [j],eax
mov ecx,dword ptr [j]
push ecx
call test (10611B3h) // 关注这句
add esp,4
看汇编代码明白了 到底谁先谁后的了吧....
还是不明白 ,可以看下<< More Effective C++>> 这本书,关于 操作符 前置、后置++ 的内容,那里讲得够清楚了吧....
#include <iostream> using namespace std; void test(int i) { cout << i << endl;} // 函数定义 int _tmain(int argc, _TCHAR* argv[]) { int i = 0; // 定义并初始化变量 test(i++); // 这一句可以这样理解吗, 相当于test(0); 和 i += 1;(这一句的具体形式不重要,目的就是让i自身增加1, 这里为了讲解的方便,就写 i+=1; 下同) int j = 0; test(++j); // 这一句可以理解成 相当于 j+=1; 和 test(1) 吗??? return 0; }
如果你认为这样的话, 那看一下对应的汇编代码:
int i = 0; // 定义并初始化变量
mov dword ptr [i],0
test(i++);
mov eax,dword ptr [i]
mov dword ptr [ebp-0DCh],eax // dword ptr [ebp-0DCh] 这个相当于临时变量
mov ecx,dword ptr [i]
add ecx,1 // 关注这句
mov dword ptr [i],ecx
mov edx,dword ptr [ebp-0DCh]
push edx
call test (10611B3h) // 关注这句
add esp,4
int j = 0;
mov dword ptr [j],0
test(++j);
mov eax,dword ptr [j]
add eax,1 // 关注这句
mov dword ptr [j],eax
mov ecx,dword ptr [j]
push ecx
call test (10611B3h) // 关注这句
add esp,4
看汇编代码明白了 到底谁先谁后的了吧....
还是不明白 ,可以看下<< More Effective C++>> 这本书,关于 操作符 前置、后置++ 的内容,那里讲得够清楚了吧....
相关文章推荐
- JS一起学01:css复习、js基础知识、事件、参数、函数、网页换肤、if判断、className问题、浏览器执行顺序
- 【基础回顾】for语句执行顺序(转)
- C#基础知识复习1代码规范-执行流程(c#)-面向对象-引用命名空间-封装-继承-访问修饰符-虚方法-静态成员-多态-抽象类等
- Unity3D基础知识(一) MonoBehaviour脚本内置函数执行顺序测试
- 强化与确认基础知识:try catch finally 的执行顺序
- 基础sql语句执行顺序的重要性
- Javascript基础与面向对象基础~Javascript中的语句如何被执行,如何改变执行顺序
- MySQL 基础 之 语句执行顺序
- 【Java基础知识】代码块的执行顺序(静态、构造、局部代码块)
- 复习知识6月12日 sql语句
- 查询语句中select from where group by having order by的执行顺序
- sql server 中sql语句执行顺序
- SQL语句执行顺序分析
- java入门基础知识(四)(复习)内部类,流,继承
- mysql查询语句的执行顺序(重点)
- mybatis如何直接 执行传入的任意sql语句 并按照顺序取出查询的结果集
- MySql 基础知识-常用命令及sql语句
- SQL语句中SELECT语句的执行顺序
- SqlServer中Sql语句的逻辑执行顺序
- Oracle数据库-where, group by, having, order by语句的执行顺序