左值意味着这个值是内存里一个可访问的地址,右值表示一个数据(可能没有确切的地址)
比如说 ++i 先将 i 所存放的数加一,再返回i,即&(++i)是有意义的,可以作为一个左值, 而 i++ 将 i的值加一,并且返回没有增加前的i,这个时候这个(i++)是一个数字,没有固定的存放地址,所以只能作为右值了.
所以:
(a++)+=a;表达式错误。
上式等价于:a++ = a + a;
(++a)+=a;表达式正确。
上式等价于:++a = a + a;
左值意味着这个值是内存里一个可访问的地址,右值表示一个数据(可能没有确切的地址)
比如说 ++i 先将 i 所存放的数加一,再返回i,即&(++i)是有意义的,可以作为一个左值, 而 i++ 将 i的值加一,并且返回没有增加前的i,这个时候这个(i++)是一个数字,没有固定的存放地址,所以只能作为右值了.
所以:
(a++)+=a;表达式错误。
上式等价于:a++ = a + a;
(++a)+=a;表达式正确。
上式等价于:++a = a + a;