printf("%d,%d",b++,++b); 对于printf的一些理解,以及前++后++

首先先说下原理:

1 printf函数对于括号内的表达式是从右向左执行,如 printf("%d,%d",b++,++b);先执行 ++b,再执行b++;

2对于++a和a++:

++a是先自加,再调用

a++是先调用,再自加

下面来分析下

代码如下

int b=20;

printf("%d,%d",b++,++b);// 21 22
printf("%d,%d",b++,b++); //21  20
printf("%d,%d",++b,++b); //22  22

printf("%d,%d",++b,b++); //22  20

首先 第一句(printf("%d,%d",b++,++b);// 21 22就这句)

先执行++b,之后b=21,再执行b++,因为b++是先先调用,在自加,所以先输出b,此时b的值是21,再自加,b=22,此时再输出b,因此输出的结果是21,22

第二句 (printf("%d,%d",b++,b++); //21  20)

先执行b++(第二个b++),因为b++是先调用,后++,所以cpu会记住d的这个printf输出的第二个输出对它的调用(此处第二个输出的值已经确定了)(这儿可能有点难理解,可以这样想,系统缓存了一个b的输出,只是还没输出而已,相当于在此处第二个输出的值就已经确定了,就是b当前的值,即20),之后再执行b++(第一个b++),b还没加的时候是21(执行前面b++得到的结果),同样,b++是先调用,再执行,因此就输出了21,第二个输出20是前面系统对它算是记忆吧,因此输出20,如果在这句后面加上printf("%d",b);的话,这句输出的b的值是22

第三句一样的道理, 先执行++b,因为++b先自加,再调用,而此时cpu并没有到调用它的时候,printf第二个格式化的值对应的数字现在还不确定,在然后执行++b,同样先自加,再调用,输出22,接着再输出第二个,因为cpu没有记住对第二的调用,他会找当前b的值,当前b的值是22,所以输出22,22

最后一句,一样的道理,这儿我就不分析了。

  • 14
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值