如果 ++a return 左值那么为什么 &(++a) 显示编译错误?

If ++a return lvalue then why &(++a) show compile error?

我听说 ++a returnc 中的左值,其中 a++ returnc 中的右值。 由于 ++a return 左值那么为什么 &(++a) 抛出编译错误?

这是一个 link:

#include<stdio.h>

int main()
{
    int a=1,*p;
    p=&(++a);
    printf("%d",p);
}

错误信息:

guess.c: In function ‘main’:
guess.c:6:4: error: lvalue required as unary ‘&’ operand
  p=&(++a);

您正在混淆 C 和 C++。在 C++ 中,您确实可以做到这一点。在 C 中,++a 只是给你 a 的新值(C++ 术语中的右值),你不能获取它的地址。

当然,你的打印应该是printf("%d\n", *p);,而不是printf("%d\n",p);(或者printf("%p\n", (void *)p);,如果你想打印a的地址)。