结构中不清楚的变量 - 双链表

时间:2016-03-17 15:32:48

标签: c pointers struct typedef doubly-linked-list

我正在分析我要构建双向链表的代码:

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)的指针。

我发现所有这些都非常混乱,似乎无法解开什么是哪个结构或指针指向哪里的元素。谁能帮我理解?

1 个答案:

答案 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;
};

很明显,prevnext是指向struct dplist_node本身的指针。

原始声明:

struct dplist_node {
  dplist_node_t * prev, * next;
  element_t element;
};

当我们看到这一点时,我们不知道dplist_node_t是什么,除非我们查看头文件,其中dplist_node_t被定义为等同于struct dplist。所以IMO不太清楚。