for循环的执行语法是:

for(<;初始化>;<条件表达式>;<增量>) 语句;

初始化总是一个赋值语句,它用来给循环控制变量赋初值;条件表达式是一个关系表达式,它决定什么时候退出循环;增量定义循环控制变量每循环一次后按什么方式变化。这三个部分之间用";"分开。

在for循环中的三个语句执行顺序是如何的呢?通过对汇编代码的调试发现了其中的玄机。

for( int i = 0;i <= 10;i++)
{cout<<i<<endl;
}

反编译后的代码如下

 for( int i = 0;i <= 10;i++)
00413632  mov         dword ptr [i],0
00413639  jmp         main+104h (413644h)
0041363B  mov         eax,dword ptr [i]
0041363E  add         eax,1
00413641  mov         dword ptr [i],eax
00413644  cmp         dword ptr [i],0Ah
00413648  jg          main+13Ch (41367Ch){cout<<i<<endl;
0041364A  mov         esi,esp
0041364C  mov         eax,dword ptr [__imp_std::endl (418290h)]
00413651  push        eax
00413652  mov         edi,esp
00413654  mov         ecx,dword ptr [i]
00413657  push        ecx
00413658  mov         ecx,dword ptr [__imp_std::cout (418288h)]
0041365E  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (418298h)]
00413664  cmp         edi,esp
00413666  call        @ILT+315(__RTC_CheckEsp) (411140h)
0041366B  mov         ecx,eax
0041366D  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (418294h)]
00413673  cmp         esi,esp
00413675  call        @ILT+315(__RTC_CheckEsp) (411140h) }
0041367A  jmp         main+0FBh (41363Bh)
0041367C  mov         dword ptr [i],0

可以看到for循环的执行过程是:

1.首先对变量int i进行赋值,而后从第3行跳到第7行;

2.执行条件表达式,判断是否跳出循环;

3.执行for循环体;

4.执行循环体完毕后,从26行跳转到第4行,执行增量语句,再顺序判断条件表达式;

5.执行for循环体。。。

for循环中的三语句执行顺序相关推荐

  1. 关于Verilog中begin···end语句执行顺序

    Verilog中分阻塞赋值和非阻塞赋值两种,组合逻辑多用阻塞赋值,此时使用begin···end语句,将一条执行完再执行下一句,即顺序执行. 而时序逻辑多是并行执行,多用非阻塞赋值,begin···e ...

  2. hmi中的宏指令是c语言,HMI中的宏指令编程中的语句执行顺序是?

    HMI中的宏指令编程中的语句执行顺序是? 以威纶通里的例子为例: 4. if结构语句 macro_command main() int k[10], j for j = 0 to 10 k[j] =  ...

  3. 整理:sql server 中sql语句执行顺序

    原文地址为: 整理:sql server 中sql语句执行顺序 SQL Server 查询处理中的各个阶段(SQL执行顺序) SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中 ...

  4. SQL Server 中SQL语句执行顺序

    SQL Server 中SQL语句执行顺序 我们需要对SQL语句的执行顺序了若指掌,才能更好的理解SQL. SQL 不同于与其他编程语言的最明显特征是处理代码的顺序. 在大数编程语言中,代码按编码顺序 ...

  5. mysql limit 执行顺序_SQL语句执行顺序及MySQL中limit的用法

    一. SQL语句执行顺序及MySQL中limit的用法 执行顺序:from... where...group by... having.... select ... order by... limit ...

  6. mysql五补充部分:SQL逻辑查询语句执行顺序

    mysql五补充部分:SQL逻辑查询语句执行顺序一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SE ...

  7. for表达式的语句执行顺序?

    for表达式的语句执行顺序? 例子1: 答案:A 1.for循环先执行表达式1,再执行表达式2,然后执行循环体,然后再来执行表达式3,若此时仍然满足表达式2,则继续执行循环体, 否则跳出for循环.m ...

  8. 关于sql和MySQL的语句执行顺序

    sql和mysql执行顺序,发现内部机制是一样的.最大区别是在别名的引用上. 一.sql执行顺序  (1)from  (3) join  (2) on  (4) where  (5)group by( ...

  9. mysql oracle 查询语句执行顺序_MySQL sql语句执行顺序

    (8)     DISTINCT (1)     FROM (3)      JOIN (2)     ON (4)     WHERE (5)     GROUP BY (6)     HAVING ...

最新文章

  1. 快速破解哈希密文findmyhash
  2. 探测函数 中断 linux,linux中断编程函数
  3. Spring IOC的理解总结
  4. springboot之session、cookie
  5. jquery教程_jQuery教程
  6. mysql之 mysql_config_editor/login-path 登录密码保护
  7. Python3 验证二代身份证号码信息
  8. 告诉你守望先锋外挂的是什么技术原理
  9. JS逆向之网易云音乐
  10. Node.js基础入门
  11. [ linux ] vim 编辑器的三种模式介绍
  12. 【Python】:数据可视化之相关系数热力图绘制(二)(seaborn版本)
  13. 线性代数学习笔记——第二十一讲——矩阵秩的等式
  14. 设计和QQ一样动态登录界面
  15. eclipse建maven项目报: Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webapp:1.0
  16. 莫比乌斯函数的两种求法(基于欧拉筛、埃氏筛)
  17. IgH详解 一、概述
  18. matlab三轴陀螺标定,三浮陀螺仪漂移模型的建立及MATLAB实现
  19. 如何脱离数学推导理解欧拉角与万向节死锁
  20. SAP 会计凭证更改(FB02) 配置及注意事项

热门文章

  1. 【Flume】Flume原理简述及示例实践
  2. SSH免密登录(笔记)
  3. 中科院基于gpt的学术优化网站搭建教程
  4. python拼音怎么写-Python汉字转换成拼音
  5. 云管平台 | 云成本分析优化管理
  6. Web前端——移动端页面开发
  7. Python基于人脸识别的考勤系统(附源码)
  8. epub解压的多个html制作单个html
  9. [已解决]mysql查询一周内的数据,解决一周的起始日期是从星期日(星期天|周日|周天)开始的问题
  10. valgrind检测内存泄漏,gperftools,memwatch和性能优化Messy_Test