如果 ++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
的地址)。
我听说 ++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
的地址)。