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