如何定义一个包含自身指针的typedef结构?
我在C写一个LinkedList,下面的代码表示我的节点定义。
typedef struct { int value; struct Node* next; struct Node* prev; } Node;
我明白(或者认为我是) struct Node
不同于typedef struct Node
。 授予我的代码编译和运行,因为它应该,但是,当分配next
和prev
(警告:从不兼容的指针types赋值)时,我得到了很多警告。 我猜测这与我如何在Node结构中定义它们有关。 我在这里上传了完整的源代码
所以,如果确实是这个问题,我应该如何在typedef struct Node
定义next
和prev
?
我担心这可能是一个转发,但不能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
及其在next
和prev
使用,直到Node
可用。