int * p =& a ++ and int * p =& ++ a

时间:2014-11-25 02:10:00

标签: c operator-keyword

代码很简单,我只想测试&和/或和++。

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是左值,因此在使用&时它不应该是错误的。得到它的地址,

2 个答案:

答案 0 :(得分:5)

您似乎误解了lvaluervalue之间的区别。在您的情况下,表达式a++++a都是rvalues,无法分配。

Here是对这种区别的一个很好的描述,但快速判断它是否是lvalue的方法是看看如果你把它放在{{1}的左侧是否会出错{1}}。

注意以下两个语句都会产生您描述的相同错误。

=

更新:正如下面提到的@mafso,++a = 5; a++ = 6; 确实是语言++a中的lvalue,在使用{{1}进行编译时,您不会看到该表达式的错误}。

答案 1 :(得分:-1)

运营商的对象&是lvalue,同样是运算符++。但是在完成++之后,它返回rvalue,这就是错误的原因。