程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C/C++拾遺錄--for循環中的三語句執行順序

C/C++拾遺錄--for循環中的三語句執行順序

編輯:C++入門知識

for循環的執行語法是:   for(<;初始化>;<條件表達式>;<增量>) 語句;   初始化總是一個賦值語句,它用來給循環控制變量賦初值;條件表達式是一個關系表達式,它決定什麼時候退出循環;增量定義循環控制變量每循環一次後按什麼方式變化。這三個部分之間用";"分開。     在for循環中的三個語句執行順序是如何的呢?通過對匯編代碼的調試發現了其中的玄機。   [cpp]   for( int i = 0;i <= 10;i++)   {       cout<<i<<endl;   }    反編譯後的代碼如下       [cpp]       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)    [cpp] view plaincopy 0041367C  mov         dword ptr [i],0      可以看到for循環的執行過程是:   1.首先對變量int i進行賦值,而後從第3行跳到第7行;   2.執行條件表達式,判斷是否跳出循環;   3.執行for循環體;   4.執行循環體完畢後,從26行跳轉到第4行,執行增量語句,再順序判斷條件表達式;   5.執行for循環體。。。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved