C语言中printf()参数的计算顺序

  • 起因 : 在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 ;
+++++++++

参考文章

博主 : 多低调的文章 : C语言——printf()计算参数顺序
博主 : 大可的Kissis
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值