- 起因 : 在
printf()
中遇到多个自增自减运算符,自己想的结果和真正的结果不一样
int x = 15;
printf("%d,%d,%d,%d,%d,%d\n",--x,x--,--x,x--,--x,x--);
- 输出结果
9,11,9,13,9,15
1. printf()中参数从右到左入栈
2. 前缀存储的是变量
3. 后缀存储的是临时变量
- 由栈底部向栈顶计算
+++top+++
| x | # step 6 : 计算表达式 -- x, x = 9
+++++++++
| t3 | # step 5 : 计算表达式 x --, t3 = 11 , x = 10
+++++++++
| x | # step 4 : 计算表达式 -- x, x = 11
+++++++++
| t2 | # step 3 : 计算表达式 x -- ,t2 = 13 , x = 12
+++++++++
| x | # step 2 : 计算表达式 -- x, x = 13
+++++++++
| t1 | # step 1 : 计算表达式 x --, t1 = x = 15 ; x = 14 ;
+++++++++
4. 出栈时,前缀都从变量x中取值,后缀从临时变量取值
+++top+++
| 9 | # 计算表达式 -- x, x = 9
+++++++++
| 11 | # 计算表达式 x --, t3 = 11 , x = 10
+++++++++
| 9 | # 计算表达式 -- x, x = 11
+++++++++
| 13 | # 计算表达式 x -- ,t2 = 13 , x = 12
+++++++++
| 9 | # 计算表达式 -- x, x = 13
+++++++++
| 15 | # 计算表达式 x --, t1 = x = 15 ; x = 14 ;
+++++++++
参考文章