(a++) += a为啥不对?

来源:百度知道 编辑:UC知道 时间:2024/06/05 01:53:44
而(++a) += a却正确?

因为C/C++要求+=语句的左面是一个“左值”(l-value)。而++a的结果是左值,但a++不是。不用说(a++) += a这样诡秘的语句不行,就是(a++)=0也是错的。

至于为什么++a的结果是左值但a++不是,简单的回答是:C/C++语言本身规定如此。如果再追问为什么这样规定,可以解释如下:

对一个合法的赋值语句(例如a=0),编译程序总是先求出等号右边的值,然后再求出左值的地址并立即把计算出的值赋给该地址。

但对于(a++)=0,如果a++可以作为左值,则编译程序求出左值的地址后就不能立即对其进行赋值操作,而是要插入一个加一操作。这就破坏了编译程序在编译不同赋值语句的一致性。

(a=a+1) +=a
当然不对,+=左边没有被赋值得变量。

首先很明确的一点就是常量是不可以进行赋值的。然后我们在看上面的式子。

首先运算()里面的,a++,根据C语言的规则,就是先取出a的值再进行自加。
打个比方a=12,
分解开来就是(12)+=a,a+=1。
这样就很明白了,12是常量,不能赋值
主要是楼主的思维上的误区,++运算,取出的不是变量,还是取出的变量的值,也就是说是一个常量

答案和楼上的一样啊