c语言的复合赋值运算符

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

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向后偏移三个单位的内存的地址。赋值是将右侧的值写入到左侧的地址。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-06
第一步: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嘛;

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网