我正在用 C 编写一个 LinkedList,下面的代码代表我的节点定义。
typedef struct {
int value;
struct Node* next;
struct Node* prev;
} Node;
我理解(或认为我理解)struct Node
与 typedef struct Node
不同。尽管我的代码可以按预期编译和运行,但是,我在分配 next
和 prev
时收到很多警告(警告:从不兼容的指针类型分配)。我猜这与我在 Node 结构中定义它们的方式有关。
我上传了完整的源here
那么,如果这确实是问题所在,我应该如何在 typedef struct Node
中定义 next
和 prev
?
我担心这可能是转贴,但找不到我要找的东西。谢谢。
最佳答案
您需要按以下顺序进行:
typedef struct Node Node;
struct Node
{
int value;
Node *next;
Node *prev;
};
这并没有完全按照您的要求进行,但它解决了问题,并且通常是这样做的。我认为没有更好的方法。
这种前向声明还有第二种用途,即数据隐藏。如果列表是在库中实现的,您可以在公共(public)头文件中只包含 typedef
,以及如下函数:
Node * list_new(void);
Node * list_append(Node *head, Node *new_tail);
size_t list_length(const Node *head);
这样,库的用户就无法轻松访问库的内部结构,即 Node
结构的字段。
关于c - 如何定义包含指向自身的指针的 typedef 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3988041/