我正在分析我要构建双向链表的代码:
struct dplist_node {
dplist_node_t * prev, * next;
element_t element;
};
struct dplist {
dplist_node_t * head;
// more fields will be added later
};
在包含的头文件中,我找到了以下行:
typedef int element_t;
typedef struct dplist dplist_t;
typedef struct dplist_node dplist_node_t;
我从中收集到的是dplist_node_t是struct dplist_node的typedef,但在两个结构中仍然有指向dplist_node_t(以及dplist_node)的指针。
我发现所有这些都非常混乱,似乎无法解开什么是哪个结构或指针指向哪里的元素。谁能帮我理解?
答案 0 :(得分:1)
实际上这个等效声明更容易理解:
struct dplist_node {
struct dplist_node * prev, * next;
element_t element;
};
struct dplist {
struct dplist_node * head;
// more fields will be added later
};
typedef
在这种情况下只会引起混淆。
使用:
typedef struct dplist dplist_t;
您可以写dplist_t
代替struct dplist
,或dplist_t*
而不是struct dplist*
。
<强>插图强>
struct dplist_node {
struct dplist_node * prev, * next;
element_t element;
};
很明显,prev
和next
是指向struct dplist_node
本身的指针。
原始声明:
struct dplist_node {
dplist_node_t * prev, * next;
element_t element;
};
当我们看到这一点时,我们不知道dplist_node_t
是什么,除非我们查看头文件,其中dplist_node_t
被定义为等同于struct dplist
。所以IMO不太清楚。