【问题标题】: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。把它想象成你的一般电子邮件地址——人们可以向你索要它,并且在你将它提供给他们后他们可以使用它,但他们无法更改它。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-08-22
            • 1970-01-01
            • 1970-01-01
            • 2014-09-09
            • 2017-06-13
            • 1970-01-01
            • 2022-06-15
            • 1970-01-01
            相关资源
            最近更新 更多