链表,结构的创建

1 c++ structure linked-list

当结构体未完全定义时,我们如何能够在结构体节点内创建节点类型的指针。

struct node
    {
        int data;
        node* next;
    }
Run Code Online (Sandbox Code Playgroud)

Pau*_*ers 5

简短的回答是因为标准是这么说的。

更长的答案是指针(无论如何都是指向数据的指针)的大小始终相同,因此编译器知道它是什么,即使node尚未完全定义。因此,它能够node在不知道接下来会发生什么的情况下确定布局,这足以让它满意。

将您的代码片段与此进行对比:

struct node
{
    int data;
    node next;
};
Run Code Online (Sandbox Code Playgroud)

现在编译器遇到了麻烦,因为每个都next将包含另一个,node而另一个又包含另一个next,依此类推,无穷无尽。因此,该代码将无法编译。但是有了指针就可以了。


根据 @GoswinvonBrederlow 的评论,更正式地struct node引入node不完整类型,即使您立即跟随它{ ... };,并且在 的声明中nodenode也被视为已声明但不完整。

接下来,深入研究该标准告诉我们:

...允许指向不完整类型的指针...

这就是让你的例子起作用的原因。正如我所说,这就是语言的设计方式。C 也大致相同。