c语言中printf中自加自减问题

printf("%d %d",b++,++b)类问题
网上的资料,自己又整合了一下,希望有用。
首先先说下原理:
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 22printf("%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
最后一句,一样的道理,这儿我就不分析了。

作者:wmda999380
来源:CSDN
原文:https://blog.csdn.net/wmda999/article/details/13510495
版权声明:本文为博主原创文章,转载请附上博文链接!

多个自加形式
观察以下代码
#include <stdio.h>
int main()
{
int a = 1;
printf("%d %d %d\n",a++,a++,a++);
printf("%d %d %d",++a,++a,++a);
return 0;
}

3 2 1
7 7 7
原理见上文

作者:qq_17268389
来源:CSDN
原文:https://blog.csdn.net/qq_17268389/article/details/83142048
版权声明:本文为博主原创文章,转载请附上博文链接!

带自减形式
见以下代码
int main(){
int i = 0;
printf("%d %d %d\n",i++,–i,i++);
return 0;
}
输出:0 1 0
–i与++i机制相似,原理见上文

猜你喜欢

转载自blog.csdn.net/qq_44028290/article/details/87876223
今日推荐