C struct返回指针,存储在引用中

时间:2014-02-26 19:56:37

标签: c pointers data-structures struct

我有一个简单的问题,我想弄清楚为什么......

我有一个返回结构指针的函数。我有一个结构变量'a'。

&a = somefunc(...) // returns a pointer to my struct.
error: lvalue required as left operand of assignment

为什么以上不起作用,而以下工作......

struct whatever *b = somefunc(...)

我的想法是,在这两种情况下,我都会返回类型结构的东西。

谢谢!

4 个答案:

答案 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分配任何内容。一般认为它是您的电子邮件地址 - 人们可以向您询问它,并且在您将其提供给他们后可以使用它,但他们无法更改它。

另一方面,*ba variable that contains an address of struct whatever。这是您可以存储价值的东西。在电子邮件术语中,这将是一个白板,有专门的空间,您可以在其中写下您的电子邮件地址。如果有人想要改变它,他们就可以做到。