link.h里的这几行代码老感觉哪里不对,大神帮忙看一下额
static inline void __list_add(struct list_head *new,
struct list_head *prev,
struct list_head *next)
{
next->prev = new;
new->next = next;
new->prev = prev;
prev->next = new;
}
static inline void list_add(struct list_head *new, struct list_head *head)
{
__list_add(new, head, head->next);
}
static inline void list_add_tail(struct list_head *new, struct list_head *head)
{
__list_add(new, head->prev, head);
}
内联函数为了不占用额外的资源不就在调用的时候展开,
根本没有重新分配空间
上面一个自然木有问题,下面一个不就是替换成这样了么,
head->prev = new;
new->next = head;
new->prev = head->prev;
head->prev->next = new;
第三行这一行head的prev不是已经断了接到new了么,不成了自己连自己了??
qianhng 于 2014-12-09 10:02:04发表:
楼主理解错误了
__list_add(new, head->prev, head);
该函数是传址,其中的head->prev是一个指针存放于堆栈中,并不会随你head->prev=new而改变,
改变的是head而不是堆栈.
比如存在一个tail,list_add_tail实际上是__list_add(new,tail_prev,tail);
替换成
tail->prev = new;
new->next = tail;
new->prev = tail_prev;
tail_prev->next = new;
cnbingu 于 2014-12-07 09:02:58发表:
不懂的路过
linuxuser2014 于 2014-12-06 09:28:19发表:
1# airfeiair
这就是循环链表