for循环中的三语句执行顺序

原创 2013年12月04日 15:48:22

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循环语句头的执行顺序

算是温习吧。问题比较基础,但是也比较重要。 for循环可以说在每个程序中都少不了的,语句头包括三个部分:初始化,判读条件,一个表达式。 但是这三个部分的执行顺序是什么,这是我们所关心的,也是本文所...
  • hitwhylz
  • hitwhylz
  • 2013年09月19日 16:40
  • 28307

JAVA for循环执行顺序 及 i++和++i的区别

1.i与i++的区别是: ++i  是先执行   i=i+1  再使用 i 的值,而 i++ 是先使用 i 的值再执行 i=i+1。 2.但是如果不了解 for 循环的执行顺序则容易出错。  fo...
  • lee_yaob
  • lee_yaob
  • 2012年07月10日 02:14
  • 11873

java for 循环执行顺序

for(表达式1;表达式2;表达式3) {     //循环体 } 先执行“表达式1”,再进行“表达式2”的判断,判断为真则执行  “循环体”,循环体执行完以后执行表达式3. 例如 for(int...
  • dota51888
  • dota51888
  • 2017年08月10日 10:00
  • 124

for循环执行过程

  • 2011年12月23日 13:05
  • 19KB
  • 下载

for循环的执行顺序

一边回顾基础一边记录记录做个整理,这篇关于for循环的执行顺序:     for(表达式1;表达式2;表达式3)     {循环体}   第一步,先对表达式1赋初值; 第二步,判别...
  • feliciafay
  • feliciafay
  • 2011年09月24日 11:38
  • 15130

C++ for循环执行顺序

for(表达式1;表达式2;表达式3) { 语句块; }    一直以为for循环在执行表达式1后,直接执行循环内部语句块,直到今天调试程序出现问题,才对这个执行顺序提出疑问。So,写了以下测...
  • u010235472
  • u010235472
  • 2016年03月30日 15:16
  • 3080

java for循环的执行顺序和几种常用写法

算是温习吧。问题比较基础,但是也比较重要。(虽然是C,但是很经典) for循环可以说在每个程序中都少不了的,语句头包括三个部分:初始化,判读条件,一个表达式。 但是这三个部分的执行顺序是什...
  • cs408
  • cs408
  • 2015年09月30日 08:58
  • 4409

三种循环的流程图画法总结 (转载)

三种循环的流程图画法总结      C语言编程中常用的三种循环为for(;;),while  和 do-while。      1.  for循环          for循环形式: for(表达式1...
  • zxianyong
  • zxianyong
  • 2010年12月05日 17:00
  • 99644

for 循环执行过程

for 循环大家都应该非常熟练地使用了,今天遇到一点小疑惑,就是关于for 循环各部分语句执行的顺序。 如下:这是一个再普通不过的for循环了 for (int i= 0; i ...
  • s228245214
  • s228245214
  • 2015年03月23日 20:14
  • 1288

c语言中for循环的执行顺序

测试c语言中的for循环的执行顺序
  • caohu2010
  • caohu2010
  • 2016年12月23日 17:43
  • 1038
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:for循环中的三语句执行顺序
举报原因:
原因补充:

(最多只允许输入30个字)