我有
struct node
{
int value;
struct node next;
};
如果我这样做,我会收到错误field next has incomplete type
但是当我宣布这样的结构时,它工作正常,
struct node
{
int value;
struct node *next;
};
为什么会出错?编译器可以知道已经声明了struct节点。
答案 0 :(得分:1)
你只能这样做
struct node
{
int value;
struct node *next;
};
此致 卢卡
答案 1 :(得分:1)
我不确定是否有人真正回答了你的问题。
由于某些原因,您无法使用结构本身。首先,你现在已经使结构自我引用,并且没有办法为它实际分配足够的空间。每次你试图分配它时,它都包含一个本身,而它本身又包含一个本身,而这个本身又包含一个......永远。所以需要无限的记忆。其次,编译器还不知道它对于那种类型的结构意味着什么,因为它还没有完成。
但是,编译器确实知道指向该结构的指针将占用多少空间 - 它与指向任何其他类型的指针相同。
此外,由于未分配结构本身的内存 - 只是指针 - 没有无限递归。
由于没有通过添加指针进行解引用,因此您不必具有结构的完整定义,以便知道访问结构成员的内存偏移量。这必须等到结构完全定义。
答案 2 :(得分:0)
struct node
{
int value;
struct node *next;
};
这段代码没问题。你只能把指针放到结构
答案 3 :(得分:0)
您可以为不使用struct关键字添加typedef,并且需要一个指针。
typedef struct node node;
struct node
{
int value;
node *next;
};