- 主题:Linus说这样写是不懂指针。看看你懂指针不
不懂指针的写法:
if (prev)
prev->next = entry->next;
else
list_head = entry->next;
懂指针的写法:
*pp = entry->next
https://grisha.org/blog/2013/04/02/linus-on-understanding-pointers/
--
FROM 125.35.123.*
实际上只有list_entry这种几乎是kernel专用的链表能那么写,因为多搞了一个专门的head节点。
普通链表一般不会多搞一个节点,从而可能是全空的。
也就是说,是一个写惯了普通链表的人在kernel中写的那段被Linus批的代码。
【 在 liuxueshen 的大作中提到: 】
: 要我还是喜欢前者,省脑子。
: 尤其是遇到007时刻。
:
--
修改:z16166 FROM 125.35.123.*
FROM 125.35.123.*
想了一会,明白了。
想起来上一次看这帖时,讨论区里问没free?这里需要free吗,没弄懂。
【 在 z16166 的大作中提到: 】
: 不懂指针的写法:
: if (prev)
: prev->next = entry->next;
: ...................
--
FROM 61.185.160.*
除了head节点,都是需要free的
man7.org/linux/man-pages/man3/list.3.html
MS也在kernel里搞这种,略有差异
【 在 DoorWay 的大作中提到: 】
: 想了一会,明白了。
: 想起来上一次看这帖时,讨论区里问没free?这里需要free吗,没弄懂。
--
FROM 103.169.216.*
说实话这些技巧就是我不会C,觉得Cpp挺好的原因。
【 在 z16166 的大作中提到: 】
: 除了head节点,都是需要free的
: man7.org/linux/man-pages/man3/list.3.html
: MS也在kernel里搞这种,略有差异
: ...................
--
修改:DoorWay FROM 113.137.164.*
FROM 113.137.164.*
除了head节点,都是需要free的
https://man7.org/linux/man-pages/man3/list.3.html
MS也在kernel里搞这种,不过有点差异
https://docs.microsoft.com/en-us/windows/win32/api/ntdef/ns-ntdef-list_entry
https://docs.microsoft.com/en-us/windows/win32/api/ntdef/ns-ntdef-single_list_entry
【 在 DoorWay 的大作中提到: 】
: 想了一会,明白了。
: 想起来上一次看这帖时,讨论区里问没free?这里需要free吗,没弄懂。
--
FROM 103.169.216.*
哇塞,有点意思
【 在 z16166 的大作中提到: 】
: 实际上只有list_entry这种几乎是kernel专用的链表能那么写,因为多搞了一个专门的head节点。
: 普通链表一般不会多搞一个节点,从而可能是全空的。
: 也就是说,是一个写惯了普通链表的人在kernel中写的那段被Linus批的代码。
: ...................
--
FROM 119.114.252.*
NO
实际上刷过题的都知道,list相关问题首先声明个栈上的dummy node,能简化各种插入删除操作代码。
【 在 z16166 的大作中提到: 】
: 实际上只有list_entry这种几乎是kernel专用的链表能那么写,因为多搞了一个专门的head节点。
: 普通链表一般不会多搞一个节点,从而可能是全空的。
: 也就是说,是一个写惯了普通链表的人在kernel中写的那段被Linus批的代码。
: ...................
--
FROM 158.140.1.*
哦,谢谢指出。那就区分为使用了dummy node技巧、没使用dummy node技巧的链表
list_entry的head节点就是dummy node
【 在 allegro 的大作中提到: 】
: NO
: 实际上刷过题的都知道,list相关问题首先声明个栈上的dummy node,能简化各种插入删除操作代码。
:
--
修改:z16166 FROM 125.35.123.*
FROM 125.35.123.*