我有一个关于lvalue
和rvalue
的问题:
void * p;
typedef struct
{
int a;
int b;
} TypeA;
&(TypeA*)p; // here it complains lvalue required as unary '&' operand
为什么
(TypeA*)p
给出了结果? 最佳答案
p
是“指向void
的指针”类型的对象;如果在p
中转换值以键入“指向TypeA
的指针”,则您将不再具有“对象”:您只有一个“值”。
“值”(如42
)没有地址。
/* wrong code; this does not work */
int *p = &42; /* values do not */
void *q = &(0xDEADBEEF); /* have addresses */
关于c - 为什么强制转换在C中给出右值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22966243/