++i和i++


++i和i++在作為一個單獨語句使用時沒有區別,即相當於i=i+1; 而作為語句的一部分時,如a=++i; 和a=i++; ++i先執行加1操作,再執行賦值操作(因++在前),而i++是先執行賦值操作,再執行加1操作(因++在后)。但這種論述未將其中更深的運行機制講出來,尤其是在if或while等判斷語句中,下面對其進行探討:

1、作為單獨語句存在,如下面的兩段代碼:
int i=0;

if(i++){...}


int i=0; 

if(++i){...}

上面的條件判斷代碼雖然是以單獨語句出現,但編譯器將其等價於i++(或++i)>0,故在第一段代碼中先執行i>0判定,再執行i++,因此條件體里的代碼不被執行;而在第二段代碼中先執行i=i+1,再執行i>0,因此條件里代碼會被執行。

2、作為語句的一部分存在,如下面的一段代碼:
int i=4,j=3; 

if((i=j++)!=4){...} 

上面的代碼中括號()的優先級比!=的優先級高,但編譯器仍然將++運算符最后執行。即先執行賦值語句i=j,然后判定(i=3)!=4成立,最后執行j++,接下去執行條件體里代碼。


綜上可知當i++作為單獨條件語句進行判定時,即使沒有顯示地聲明與0的比較,編譯器仍將加上與0的比較;當i++作為復合語句使用時,不管++是否在優先級更高的運算符中,++仍然最后才執行,即在當前所在語句操作執行之后。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM