下一个结构项,不完整类型

Qxt*_*rml 5 c struct field linked-list

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

给出"下一个字段有不完整的类型错误".

这个结构有什么问题?

det*_*tly 12

创建自引用数据类型时,需要使用指针来解决循环问题:

struct node;

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

...应该可以工作,但在使用时请注意正确分配内存.

为什么指针?考虑一下:struct定义的要点是编译器可以计算出要分配多少内存以及在您说时要访问哪些部分node.id.如果你的nodestruct包含另一个nodestruct,编译器应该为给定的内存分配多少内存node

通过使用指针可以解决这个问题,因为编译器知道为指针分配多少空间.


Mar*_*rst 5

如果结构可以包含其自己类型的另一个实例,则其大小将是无限的.

这就是它只能包含指向它自己类型的指针的原因.

此外,在代码中的那一点,结构的大小是未知的,因此编译器无法知道为它保留多少空间.