我有一个简单的问题,我想弄清楚为什么......
我有一个返回结构指针的函数。我有一个结构变量'a'。
&a = somefunc(...) // returns a pointer to my struct.
error: lvalue required as left operand of assignment
为什么以上不起作用,而以下工作......
struct whatever *b = somefunc(...)
我的想法是,在这两种情况下,我都会返回类型结构的东西。
谢谢!
答案 0 :(得分:1)
&a
表示“给我一个地址”,这不是一个l值(你不能给它分配任何东西)。
在第二个示例中,*b
是有效的l值
你可以想到&a
返回100.你不能做100 =某事。
虽然b
是一个有效的变量(类型指针)。
答案 1 :(得分:1)
只有一个指针可以保存地址,你试图为一个地址分配一个地址,即在第一种情况下为一个值赋值。
答案 2 :(得分:1)
address of
运算符&
产生rvalue
,它是其操作数的内存地址。您不能在作业的左侧使用右值。因此,您需要lvalue
并存储变量的地址,您需要一个指针类型变量。
struct mystruct {
int marks;
char grade;
};
// a is of type struct mystruct.
// stores a value of this type
struct mystruct a;
// b is pointer to struct mystruct type.
// stores the address of a variable of this type.
struct mystruct *b;
b = &a; // assign b the address of a
答案 3 :(得分:1)
&a
表示address of a
。您无法为address of something
分配任何内容。一般认为它是您的电子邮件地址 - 人们可以向您询问它,并且在您将其提供给他们后可以使用它,但他们无法更改它。
另一方面,*b
为a variable that contains an address of struct whatever
。这是您可以存储价值的东西。在电子邮件术语中,这将是一个白板,有专门的空间,您可以在其中写下您的电子邮件地址。如果有人想要改变它,他们就可以做到。