【问题标题】:Why is there a nested pointer inside a C struct definition?为什么 C 结构定义中有嵌套指针?
【发布时间】:2016-04-22 08:37:10
【问题描述】:

我正在学习 Learn C The Hard Way,并且正在努力理解练习 16:结构和指向它们的指针中的一些内容。

struct Person *Person_create(char *name, int age, int height, int weight)
{
    struct Person *who = malloc(sizeof(struct Person));
    assert(who != NULL);

    who->name = strdup(name);
    who->age = age;
    who->height = height;
    who->weight = weight;

    return who;
}

我了解 struct Person 返回指向该结构开头的指针 (*person_create)。但是为什么有第二个结构定义 Person 立即嵌套在里面呢?指向*谁?

有人可以帮我解释一下吗?或者指出我对 C 中结构定义的更好解释。

【问题讨论】:

  • 我们缺少(但可以猜到)struct Person 的定义
  • 不。 Person_create 函数返回一个指向Person 的指针。 who 变量保存函数返回的值。您分配内存,并保存内存所在位置的副本。然后在最终返回已分配内存的位置之前设置此结构的各个字段,在本例中为Person 的开头。 (您可以通过继续使用掌握它们):) - 指针与书中的页码有一个粗略的类比 - 它们告诉您在哪里可以找到某些东西,并具有告诉(通过指针的类型)会出现什么的额外优势.

标签: c function pointers struct syntax


【解决方案1】:

我了解struct Person 返回一个指针 (*person_create)

等等,不是你想的那样,或者至少你不是那样说的......

这里,person_create() 是一个函数,它返回一个指向struct Person 的指针。这不是struct Person 的定义。

现在,说到你的实际问题,struct Person *who 没有定义struct Person,而是定义了一个变量who,它是一个指向struct Person 的指针。

为便于理解,请考虑int someRandomVariable = 0。它没有定义int,对吧?它定义了一个int 类型的变量someRandomVariable

【讨论】:

  • 是的。在这种情况下使用“我明白”这个词有点乐观。我真的不确定发生了什么。
  • 谢谢顺便说一句。这很有帮助。会写一些cmets给它,花点时间思考。
【解决方案2】:

该函数返回一个struct Person * 类型的指针,换句话说,一个指向struct Person 的指针。

特别是在这里,您将返回的指针命名为who,正如您可以从声明struct Person * who = ... 中理解的那样。因此,您需要为变量who 分配内存,您将对其进行填充,并返回一个指向的指针。

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 2010-11-14
    • 2021-02-13
    • 1970-01-01
    相关资源
    最近更新 更多