隐藏类型的本质

时间:2014-01-28 06:15:44

标签: c pointers linked-list

要学习链接列表(双重链接)概念,我正在编写一些简单的常用函数来处理它们。大多数函数都指向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?也许是typedefing?

github repo

2 个答案:

答案 0 :(得分:0)

没有使用全局变量或可怕的宏,没有。您明确地将希望函数操作的对象作为参数传递。

答案 1 :(得分:0)

你可以做到

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);
...}

如果你想避免输入&,但它并没有真正为你节省一些东西。

一个优秀的编译器应该优化它。