以下声明有效。
struct node
{
int a;
struct node *next;
};
然而,当我们定义以下内容时,它会给出错误。
"error: field ‘next’ has incomplete type"
为什么会这样呢?
struct node
{
int a;
struct node next; /* Not a pointer */
};
node in struct node
是一个“结构标记”,在您编写时它会创建一个“不完整类型”:此时尚未声明但未定义的结构变量。最终类型尚未完成};
你的结构的。
在 C 中,即使在完全定义不完整类型之前,也可以通过使用指向该类型的指针来引用该类型。但是,您不能分配该类型的变量(实例),因为实际的结构定义尚未定义。 (如果您熟悉的话,它的工作方式与 C++ 中的抽象基类完全相同。)
所以当你写的时候
struct node {
int a;
struct node *next;
};
the row struct node *next
意思是“这是一个指向结构节点的指针,尽管我还不知道该类型是如何定义的”。但你不能声明一个类型的变量struct node
在该类型的结构定义中,仅仅是因为在创建某些东西之前你不能使用它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)