如何定义一个包含自身指针的typedef结构?

我在C写一个LinkedList,下面的代码表示我的节点定义。

typedef struct { int value; struct Node* next; struct Node* prev; } Node; 

我明白(或者认为我是) struct Node不同于typedef struct Node 。 授予我的代码编译和运行,因为它应该,但是,当分配nextprev (警告:从不兼容的指针types赋值)时,我得到了很多警告。 我猜测这与我如何在Node结构中定义它们有关。 我在这里上传了完整的源代码

所以,如果确实是这个问题,我应该如何在typedef struct Node定义nextprev

我担心这可能是一个转发,但不能find我正在寻找的东西。 谢谢。

你需要按照这个顺序来做:

 typedef struct Node Node; struct Node { int value; Node *next; Node *prev; }; 

这不完全是你问的,但它解决了这个问题,这是通常如何完成。 我不认为有更好的办法。

这种前向声明在数据隐藏方面有第二种用法。 如果列表是在一个库中实现的,那么你可以在公共头文件中使用typedef ,以及如下的函数:

 Node * list_new(void); Node * list_append(Node *head, Node *new_tail); size_t list_length(const Node *head); 

这样,图书馆的用户就不容易访问你的图书馆的内部,即Node结构的字段。

另一个可以接受的方法是对OP代码的改动最小的是:

 typedef struct NodeT { int value; struct NodeT * next; struct NodeT * prev; } Node; 

注意NodeT及其在nextprev使用,直到Node可用。