当结构节点尚未定义时,C/CPP 如何知道如何指向“下一个”结构节点?

1 c c++ struct linked-list

创建单链表时,通常创建 Node 结构体,如下所示:

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

但是,我想知道如果的定义尚未完成,指向下一个节点的指针如何next知道结构是什么。nodenode

我从quora了解到编译器无法编译以下内容:

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

给出以下错误:

a.c:6:13: error: field has incomplete type 'struct node' 
struct node next; 
            ^ 
a.c:4:8: note: definition of 'struct node' is not complete until the closing '}' 
struct node { 
       ^ 
1 error generated. 
Run Code Online (Sandbox Code Playgroud)

如果在node使用'}'之前没有定义结构体,那么我们怎么能将指针设置为未定义的用户定义数据类型呢node

ska*_*oto 5

它不需要知道。指针只是一个地址。在您的结构中,当您定义下一个属性时,编译器将在结构内保留足够的空间来保留地址。它不需要知道完整的结构。

这:

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

无法编译,因为编译器无法确定节点结构的大小。结构体的大小等于结构体的大小加上 int 的大小。