我正在尝试访问以下结构的元素i,f和ch。
struct a{
struct b{
int i;
float f;
char ch;
}x;
struct c{
int j;
float g;
char ch;
}y;
};
必须通过将结构c的地址传递给函数并计算其到访问结构b的偏移量来完成
struct a z;
fun(&z.y);
功能如下:
fun(struct c *p){
int offset;
struct b *address;
offset = (char *) &((struct c*)(&((struct a*)0)->y)->j) - (char *)((struct a*)0);
address = (struct b*)((char *)&(p->j)-offset);
address->i = 400;
address->f = 3.14;
address->ch = 'c';
}
尽管进行了很多尝试,但始终会显示错误lvalue required as unary '&' operand
我知道该错误的含义,但无法在此处完成。
谢谢。
答案 0 :(得分:2)
&
仅可用于变量(包括数组元素或struct成员)-更正式地称为 lvalues 。本质上,您可以在=
左侧的任何内容上使用它(这就是左值获得其名称的方式)。例如,您无法执行&(1 + 1)
。出于同样的原因,您也无法执行&(&some_variable)
:&some_variable
不是左值。
很容易看到它们不是左值,因为您无法执行1 + 1 = something;
或&some_variable = something;
。
您有&((struct c*)(&((struct a*)0)->y)->j)
。或者简化为&(&(something))
。这是无效的。我不知道该函数要执行的操作,但是也许您使用了两个&
而不是一个简单的错误。