为什么C结构定义中有嵌套的指针?

问题描述:

我正在通过学​​习C艰难的方法,并努力理解练习16中的某些内容:构造和指向它们。为什么C结构定义中有嵌套的指针?

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; 
} 

我明白,结构人员返回一个指针(* person_create)的结构的开始。但是为什么Person中立即嵌套第二个结构定义?指向*谁?

有人可以为我阐明这一点。或指向我往的结构定义在C

+1

我们错过了(但可以猜到)struct Person的定义 –

+1

没有。 'Person_create'函数返回一个指向'Person'的指针。 'who'变量保存函数返回的值。您分配内存,并保存内存位置的副本。然后在最终返回分配内存的位置之前设置此结构的各个字段,在这种情况下,这是“Person”的开始。 (你可以继续使用它们):) - 指针与书中的页码有一个粗略的类比 - 它们告诉你在哪里可以找到某些东西,还可以告诉(通过指针的类型)哪里会有什么。 – enhzflep

我明白struct Person返回一个指向一个更好的解释(*person_create

等待,这不是你的想法,或至少你不这样说...

这里,person_create()功能,它返回指向struct Person的指针。这是而不是struct Person的定义。

现在,说,为您的实际quetion,struct Person *who定义struct Person,相反,它定义了一个变量who这是一个指向struct Person

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

+0

是的。在这种情况下使用“我明白”一词有点乐观。我真的不知道发生了什么事。 –

+0

谢谢btw。这是帮助。会写一些评论,花一些时间思考。 –

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

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