1 #include <stdio.h> 2 3 void main() 4 { 5 int i = 5; 6 printf("%d %d %d %d\n", i, --i, i, i--); 7 }
輸出是“3 3 3 5”。-------兩條原則解釋如下
(1)printf函數的壓棧問題,總的來說就是參數從右向左依次壓棧(也即i--,i, --i,i),再出棧(i, --i, i, i--)。
(2)對於i++或者i--的結果,是有ebp尋址函數棧空間來記錄中間結果的,在最后給printf壓棧的時候,再從棧中把中間結果取出來;而對於++i或者--i或者i的結果,則直接壓寄存器變量,寄存器經過了所有的 自增/減 操作。”因此哪些壓入寄存器的變量,我們不妨認為最后的結果i和--i和++i結果相同(他們都可以做左值)
例子2:
1 #include <stdio.h> 2 int main() 3 { 4 int i = 5; 5 printf("%d %d %d %d %d\n", i, --i, i,++i,i++); //6 6 6 6 5 6 }
例子3:
1 x=1; printf("%d %d\n",x,x++); 2 1 2 x=1; printf("%d %d\n",x++,x); 1 2 3 x=1; printf("%d %d %d\n",x,x++,x); 2 1 2 4 x=1; printf("%d %d %d %d\n",x,++x,x++,x); 3 3 1 3
借鑒的部分解釋請看 http://www.zzzj.com/html/20090609/71613.html
https://blog.csdn.net/hcx25909/article/details/30219265
https://blog.csdn.net/kzzhr/article/details/8482657?utm_source=blogxgwz8