printf 与前置++、后置++、前置--、后置-- 的关系

# 前置++和前置--

先看一段代码

大家是不是认为printf输出的是

2 3 3

2 1 1

但是实际输出的是

3 3 3

1 1 1

在这两行printf函数代码里,编译器会先计算 ++a 和 --a 的值,然后再 从右向左 开始输出。

printf函数中,如果有多个 前置++ 或者 前置-- ,先 从右向左 计算最终的值,再 从右向左 输出最终的值

printf 函数中,如果 前置++ 与 前置-- 同时存在,会像上面的例子,先 从右向左 按顺序计算出最终的值,再 从右向左 输出最终的值

# 后置++ 和 后置--

先看这段代码

从上面的代码可以得知:

printf函数会从最右边的带有 后置++ 或 后置-- 的代码 开始运行输出,然后再跳到下一个带有 后置++ 或 后置-- 的代码 运行输出,计算出最终的值后再 从右向左 向没有带++或--的代码 输出最终的值.

a = 2;

printf("%d %d %d\n", a++, a , a++);

(1) (2) (3)

( 后置-- 和 后置++ 与 后置-- 混合 也是如此)就比较如这个例子:

•第(3)的 a++ 会先运行输出 2 ,然后加 1 变成 3 ;

•之后跳到(1)的 运行输出 3 ,然后 加 1 变成 4 ;

•左边已经没有带有 后置++ 的a,这时候 编译器就会从 最右边开始 向左没有带 操作符的a 输出 最终的值,即 4 ;

•最终的输出结果就为 3 4 2

# 后置++、后置-- 与 前置++、前置-- 混合

•这里先说 运行法则:前置类型运行不打印;后置类型即打印也运行;无符号类型的和前置类型的等到 从右到左 计算完最终值后打印最终值。

用上面的例子来说明

首先,还是从最右边带符号的开始 从右向左 计算 带符号的代码:

•从第(5)--a 开始计算,先运行 --符 ------> a - 1,计算后 a = 1,因为 --a 是前置类型,这时不输出打印;

•第(4)a-- 带有符号,是后置类型,先打印前面传来的 1,再运行 -- 符 ---> a - 1, 计算后a = 0;

•第(3)++a 带有符号 ,前置类型,先运行 ++符 ------> a = 1, 计算后 a = 1,因为 ++a 是前置类型,这时不输出打印;

•第(2)a 不带符号跳过它,来到带有符号的第(1)a++,后置类型,先打印前面传来的 1,再运行 ++ 符 ---> a + 1, 计算后a = 2;

•到这我们已经计算出后值类型 :第(4)a--的值 1和第(1)a++的值1了;和最终的值 2 了

•接下就输出无符号类型的和前置类型的值,从右到左 打印最终值 2

相关推荐
whoarethenext4 分钟前
c/c++的opencv的轮廓匹配初识
c语言·c++·opencv
isyangli_blog13 分钟前
(1-4)Java Object类、Final、注解、设计模式、抽象类、接口、内部类
java·开发语言
apocelipes17 分钟前
使用libdivide加速整数除法运算
c语言·c++·性能优化·linux编程
三块钱079421 分钟前
【原创】基于视觉大模型gemma-3-4b实现短视频自动识别内容并生成解说文案
开发语言·python·音视频
易只轻松熊21 分钟前
C++(20): 文件输入输出库 —— <fstream>
开发语言·c++·算法
芯眼25 分钟前
ALIENTEK精英STM32F103开发板 实验0测试程序详解
开发语言·c++·stm32·单片机·嵌入式硬件·社交电子
青出于兰1 小时前
C语言| 指针变量的定义
c语言·开发语言
玉笥寻珍1 小时前
筑牢信息安全防线:涉密计算机与互联网隔离的理论实践与风险防控
开发语言·计算机网络·安全·计算机外设·php·安全架构·安全性测试
蓝莓味柯基1 小时前
Lodash isEqual 方法源码实现分析
开发语言
秋野酱1 小时前
python项目参考文献
开发语言·python