我有一个关于lvaluervalue的问题:

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/

10-09 00:29