關於printf("%d,%d",i++,i++)的輸出結果


int main(){

  int i=0;

  printf("%d,%d",i++,i++);

  return 0;

}

輸出結果1,0

網上很多帖子說了這個問題,還有匯編部分截圖。我這里不再重復。

說下個人理解,函數參數是自右向左入棧,這個相信大家都知道。

這題的關鍵是右一參數入棧后,右二參數入棧前,這中間做了什么。

看匯編部分代碼可以知道,右一入棧后,拷貝i值到緩沖區后就先做了自增運算,所以右二參數入棧時,i已經進行了自增運算,導致輸出結果為1,0

所以是這種自增減的參數運算題,可以這么算,自右向左,第一個值為原始值,第二個值為第一個值的運算結果,以此類推

所以printf("%d,%d,%d,%d",i++,i++,i--,i++)的輸出結果就是:1,0,1,0

 


免責聲明!

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



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