【问题标题】:C struct return pointer, store in referenceC结构返回指针,存储在引用中
【发布时间】:2014-02-26 19:56:36
【问题描述】:
我有一个简单的问题,我想弄清楚为什么......
我有一个返回结构指针的函数。我有一个结构变量'a'。
&a = somefunc(...) // returns a pointer to my struct.
error: lvalue required as left operand of assignment
为什么上面的不起作用,而下面的起作用......
struct whatever *b = somefunc(...)
我的想法是,在这两种情况下,我都会返回 struct 类型的东西。
谢谢!
【问题讨论】:
标签:
c
pointers
data-structures
struct
【解决方案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
【解决方案2】:
&a 的意思是“给我一个地址”,它不是左值(你不能给它分配任何东西)。
在第二个示例中,*b 是一个有效的左值
你可以认为&a 返回 100。你不能做 100 = 某事。
而b 是一个有效的变量(指针类型)。
【解决方案3】:
只有指针可以保存地址,您试图将地址分配给地址,即第一种情况下的值。
【解决方案4】:
&a 表示address of a。您不能将任何内容分配给 address of something。把它想象成你的一般电子邮件地址——人们可以向你索要它,并且在你将它提供给他们后他们可以使用它,但他们无法更改它。
另一方面,*b 是 a variable that contains an address of struct whatever。这是您可以在其中存储值的东西。在电子邮件术语中,这将是一个带有专用空间的白板,您可以在其中写下您的电子邮件地址。如果有人想改变它,他们可以做到。