C/C++拾遗录--for循环中的三语句执行顺序

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循环体。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值