为什么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
我明白
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
。
是的。在这种情况下使用“我明白”一词有点乐观。我真的不知道发生了什么事。 –
谢谢btw。这是帮助。会写一些评论,花一些时间思考。 –
该函数返回类型为struct Person *
的指针,换句话说,指向struct Person
的指针。
特别是在这里,您将返回的指针名为who
,正如您可以从声明struct Person * who = ...
中了解的那样。因此,您需要为将填充的变量who
分配内存,并返回指向的内存。
我们错过了(但可以猜到)struct Person的定义 –
没有。 'Person_create'函数返回一个指向'Person'的指针。 'who'变量保存函数返回的值。您分配内存,并保存内存位置的副本。然后在最终返回分配内存的位置之前设置此结构的各个字段,在这种情况下,这是“Person”的开始。 (你可以继续使用它们):) - 指针与书中的页码有一个粗略的类比 - 它们告诉你在哪里可以找到某些东西,还可以告诉(通过指针的类型)哪里会有什么。 – enhzflep