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