深入理解前置、后置自增与printf结合时的输出结果

背景介绍

关于前置自增、后置自增的介绍文章已经很多了。例如:C++ 递增运算符:前置++和后置++的区别(读者可以自行搜索其他文章)。

可以得出的一个结论是前置版本将对象本身作为左值返回,后置版本则将原始对象的副本作为右值返回

因此像下面这段代码,将会输出:2, 1, 3。

int mian() {
    int i, j, k;
	i = 0;
	j = 1;
	k = 2;
	k += (i++) + j;  // k = 3;
	printf("%d, %d, %d", ++i, j--, k);
} 

printf打印

考虑下面这段代码:

int mian() {
	int i = 0;
	printf("%d, %d, %d, %d", ++i, i++, --i, i++);
} 

一种自然的想法是输出的结果应该是:1, 1, 1, 1。然而编译后实际输出却是:2, 0, 2, 0。实际上,printf在打印之前把需打印的值推入栈中,最终将打印结果出栈。也就是实际流程是:
需打印的值入栈过程
也就是说前置的自增(或自减)最终打印的都是i最终的值,也就是2,而后置的自增(或自减)打印的则为从右往左进行计算时,i自增(或自减)之前的值。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以回答这个问题。 在C语言中,数字8的前置后置自增运算以及前置后置自减运算可以通过以下代码实现: ```c #include <stdio.h> int main() { int a = 8; int b, c, d, e; b = ++a; // 前置自增运算 c = a++; // 后置自增运算 d = --a; // 前置自减运算 e = a--; // 后置自减运算 printf("前置自增运算: a=%d, b=%d\n", a, b); printf("后置自增运算: a=%d, c=%d\n", a, c); printf("前置自减运算: a=%d, d=%d\n", a, d); printf("后置自减运算: a=%d, e=%d\n", a, e); return 0; } ``` 输出结果为: ``` 前置自增运算: a=9, b=9 后置自增运算: a=10, c=9 前置自减运算: a=9, d=9 后置自减运算: a=8, e=9 ``` ### 回答2: 在C语言中,数字8的前置后置操作符分别是++8和8++。 前置操作符++8表示先将数字8的值加1,然后返回新值作为表达式的结果。所以,计算++8的值,将8加1得到9,并且将9输出。 后置操作符8++表示先将数字8的值返回作为表达式的结果,然后再将其加1。所以,计算8++的值,先将8输出,然后将8的值加1变为9。 前置--操作符--8表示先将数字8的值减1,然后返回新值作为表达式的结果。所以,计算--8的值,将8减1得到7,并且将7输出。 后置--操作符8--表示先将数字8的值返回作为表达式的结果,然后再将其减1。所以,计算8--的值,先将8输出,然后将8的值减1变为7。 总的来说,计算数字8的前置后置值分别是9和8,计算前置--和后置--值分别是7和8。 ### 回答3: 在C语言中, 前置自增和自减运算符将先对操作数进行递增或递减操作, 然后返回递增或递减后的值;后置自增和自减运算符则是先返回操作数的原值, 然后再进行递增或递减操作。 首先, 计算数字8的前置值: int a = 8; int pre_increment = ++a; 输出:pre_increment的值为9 接下来, 计算数字8的后置值: int b = 8; int post_increment = b++; 输出:post_increment的值为8 然后, 计算数字8的前置自减值: int c = 8; int pre_decrement = --c; 输出:pre_decrement的值为7 最后, 计算数字8的后置自减值: int d = 8; int post_decrement = d--; 输出:post_decrement的值为8 以上就是数字8的前置后置前置自减和后置自减的计算结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值