为了学习链表(双重链接)的概念,我正在编写一堆简单的通用函数来处理它们。大多数功能都使用指向DL_List的指针
结构,它是句柄,不仅包含指向第一个和最后一个元素的链接,而且还包含列表中的当前位置。

       typedef struct DL_Node {
               struct DL_Node *next = NULL;
               struct DL_Node *prev = NULL;

               int data;
       } DL_Node;

       typedef struct DL_List {
               struct DL_Node *first = NULL;
               struct DL_Node *last  = NULL;

               struct DL_Node *cur   = NULL;
       } DL_List;


因此,我总是必须将指针传递给该句柄。

   int main() {...
       DL_List list; // lives on the stack

       init_list(&list, 9);
       push(&list, 7);
       append(&list, 10);
       insert_after(&list, -31);
       print_list(&list);
   ...}


所以这是一个问题:有什么方法可以避免重读通过&list的内容?也许是typedef?

github repo

最佳答案

你可以做

int main() {...
   DL_List list; // lives on the stack
   DL_List * plist = &list;

   init_list(plist, 9);
   push(plist, 7);
   append(plist, 10);
   insert_after(plist, -31);
   print_list(plist);
...}


如果您想避免输入&,但这并不能真正为您节省一些时间。

一个好的编译器应该对此进行优化。

关于c - 隐藏类型的性质,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21398241/

10-09 19:29