先看几个例子
#include <stdio.h> int main() { unsigned a = 16; printf("%d,%d,%d", a >> 2, a = a >> 2, a); return 0; }
1,4,4
#include <stdio.h> int main() { unsigned a = 16; printf("%d", a >> 2); return 0; }
4
- 说明即使后续的运算,将会影响前面的输出
实验
#include <stdio.h> int main(){ int b = 2; printf("%d,%d", b, b = b + 2); return 0; }
4,4
- 与预想的一样,输出了4,4
#include <stdio.h> int main(){ int b = 2; printf("%d,%d,%d", b, b = b + 2, b + 3); return 0; }
4,4,5
#include <stdio.h> int main() { int b = 2; // printf("%d,%d,%d,%d,%d\n", b, b = b + 2, b + 3, b = b + 3, b = b + 1); printf("%d,%d,%d,%d\n", b, b = b * 2, b + 3, b = b + 2); return 0; }
8,8,7,8
结论
printf函数中,参数从后往前执行, 赋值语句会改变之前赋值过的值 , 所有带有赋值语句的值相同
例: printf("%d,%d,%d,%d\n", b, b = b * 2, b + 3, b = b + 2);
一个四个打印的参数 , 其中两个带有赋值语句
第二个 b = b * 2 , 第四个b = b+2
从后往前执行:
- b = b + 2 => b ==
4
==> b 打印变量 b - b + 3 => 4+3=7 ==> 7 打印常量 7
- b = b * 2 => b = 4*2==8 ==> b 打印变量 b 此处将前面的变量b 也改变为8了
- b => b ==> b 打印变量 b
- 变量b的值将会统一, 最后一起打印显示数据: 8,8,7,8
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构