c语言的复合赋值运算符

A=A+1;A+=1;经常看到类似的话:对于A=A+1,表达式A被计算了两次,对于复合运算符A+=1,表达式A仅计算了一次。我想问一下,A=A+1为什么A被计算两次,那两... A=A+1;
A+=1;
经常看到类似的话:对于A=A+1,表达式A被计算了两次,对于复合运算符A+=1,表达式A仅计算了一次。
我想问一下,A=A+1为什么A被计算两次,那两次啊,程序到底是怎么个执行顺序啊,这方面的知识点从哪本书里能找到啊,小白一脸懵逼啊,就差从入门到放弃了。。。
展开
 我来答
GTA小鸡
高粉答主

2018-07-04 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.6万
采纳率:78%
帮助的人:1.3亿
展开全部
A=A+1,首先要求赋值号右侧的表达式A的值,然后将它与1相加,接着求赋值号左侧的表达式A的值,最后将加法的结果写回A中,所以表达式A被求值了两次;A+=1,首先求得赋值号左侧的表达式A的值,将这个值加上1,然后写回A中,表达式A只被求值了一次。
这是理想的情况,实际中现代编译器都非常智能,在开启编译优化时,A=A+1这样的语句将被直接优化为A+=1甚至是A++。
追问
A=A+1,求左侧的A的值有啥用啊,右侧A与1相加后,在求左侧A的值,那此时左侧A的值更不更新为与1相加后的值啊
追答
对赋值号右侧的A求的是值,对赋值号左侧的A求的是地址。如果A表示p[1+2],那么在右侧p[1+2]代表的是指针p向后偏移三个单位的内存中的值,而在左侧p[1+2]代表的是指针p向后偏移三个单位的内存的地址。赋值是将右侧的值写入到左侧的地址。
戏远巴乙
2020-05-06 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:29%
帮助的人:1117万
展开全部
第一步:a=a/(a-6),a的值传递给第二步进行下一步计算
第二步:a=a*a,a的值传递给第三步进行下一步计算
第三步:a=a+a,a的最终结果在这里
记住两句话:
1、=赋值号,自右向左进行;
2、a+=1相当于a=a+1。这个a/=a-6先把a-6看成一个数,a/=1不就是a=a/1嘛;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式