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被计算两次,那两次啊,程序到底是怎么个执行顺序啊,这方面的知识点从哪本书里能找到啊,小白一脸懵逼啊,就差从入门到放弃了。。。 展开
A+=1;
经常看到类似的话:对于A=A+1,表达式A被计算了两次,对于复合运算符A+=1,表达式A仅计算了一次。
我想问一下,A=A+1为什么A被计算两次,那两次啊,程序到底是怎么个执行顺序啊,这方面的知识点从哪本书里能找到啊,小白一脸懵逼啊,就差从入门到放弃了。。。 展开
2个回答
展开全部
A=A+1,首先要求赋值号右侧的表达式A的值,然后将它与1相加,接着求赋值号左侧的表达式A的值,最后将加法的结果写回A中,所以表达式A被求值了两次;A+=1,首先求得赋值号左侧的表达式A的值,将这个值加上1,然后写回A中,表达式A只被求值了一次。
这是理想的情况,实际中现代编译器都非常智能,在开启编译优化时,A=A+1这样的语句将被直接优化为A+=1甚至是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向后偏移三个单位的内存的地址。赋值是将右侧的值写入到左侧的地址。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询