c语言中自增自减运算符的运算次序?

#include<stdio.h>main(){inta=5,b=5,c,d;a=a++;b=++b;printf("a=%d,b=%d\n",a,b);c=a++;d=... #include<stdio.h>
main()
{int a=5,b=5,c,d;
a=a++;
b=++b;
printf("a=%d,b=%d\n",a,b);
c=a++;
d=++b;
printf("c=%d,d=%d\n",c,d);
}
运行结果:
a=5,b=6
c=5,d=7
为什么a和c不是6?
展开
 我来答
帐号已注销
2019-12-20 · TA获得超过317个赞
知道小有建树答主
回答量:345
采纳率:90%
帮助的人:84.4万
展开全部

a=a++;

b=++b;

如下图红框中所示(gcc编译时告警),上述两种用法对编译器来说是无定义的,即是说C语言标准中没有规定该怎么处理,因为实践过程中也没人这么用。

既然没有标准,又不能说是语法错误,那就依赖编译器实现。A编译器实现可以让a = 5,B编译器实现也可以让a = 6。因此,在实际项目中,不要写这样的语句。

追问
#include
main()
{int x=3,y=5;
printf("%d,%d\n",(x--,--y),x++);
}
结果:4,3
#include
main()
{int a=3;
printf("%d,%d\n",a,(a-=a*a));
}
结果:-6,-6
如何解释以上两个程序?
苦瓜它不苦
2019-12-20 · TA获得超过211个赞
知道小有建树答主
回答量:334
采纳率:70%
帮助的人:71.2万
展开全部
后置递增递减运算符,将操作数递增或递减1,再将操作数的原值返回,也就是说有一个临时变量用来存放原来的值,在完成递增或递减操作后,将临时变量返回。
前置和后置区别就在这,前置返回的是新值,后置返回的是旧值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
婉顺还轻盈灬宝贝457
2019-12-20 · TA获得超过6234个赞
知道大有可为答主
回答量:1.3万
采纳率:49%
帮助的人:544万
展开全部
i++是先使用i的值,再对i进行加1操作.
所以在p=(i++)+(i++)+(i++)里面在计算p的值之前,i本身的值总是5.
所以p的值就是3个5所以是15.在运算完p之后,因为有3个i++,所以i做了3次自加运算,所以i最终是8.
q的变化同理.
所以最终打印结果是 15,15,8,8
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式