代码很简单,我只想测试&和/或和++。
int main()
{
int a=10;
int *p;
int *q;
p=&++a;//error: lvalue required as unary ‘&’ operand
q=&a++;//error: lvalue required as unary ‘&’ operand
return 0;
}
当 gcc 编译它时,出现了两个错误。在我看来,a++
是正确的值,但++a
是左值,因此在使用&时它不应该是错误的。得到它的地址,
答案 0 :(得分:5)
您似乎误解了lvalue
和rvalue
之间的区别。在您的情况下,表达式a++
和++a
都是rvalues
,无法分配。
Here是对这种区别的一个很好的描述,但快速判断它是否是lvalue
的方法是看看如果你把它放在{{1}的左侧是否会出错{1}}。
注意以下两个语句都会产生您描述的相同错误。
=
更新:正如下面提到的@mafso,++a = 5;
a++ = 6;
确实是语言++a
中的lvalue
,在使用{{1}进行编译时,您不会看到该表达式的错误}。
答案 1 :(得分:-1)
运营商的对象&是lvalue
,同样是运算符++。但是在完成++之后,它返回rvalue
,这就是错误的原因。