读书人

两处赋值感觉代码都一个意义去了一

发布时间: 2013-02-24 17:58:56 作者: rapoo

两处赋值,感觉代码都一个意思,去了一个,程序出错
http://bbs.csdn.net/topics/390368479
上个贴子


#define TAILQ_INSERT_TAIL(head, elm, field) do {\
(elm)->field.tqe_next = NULL;\
(elm)->field.tqe_prev = (head)->tqh_last;\
*(head)->tqh_last = (elm);\
(head)->tqh_last = &(elm)->field.tqe_next;\
} while (0)


预处理后:

do {
(&a1)->next.tqe_next = ((void *)0);
(&a1)->next.tqe_prev = (&list)->tqh_last;
*(&list)->tqh_last = (&a1);
(&list)->tqh_last = &(&a1)->next.tqe_next;
} while (0);


我感觉
*(&list)->tqh_last = (&a1); 
(&list)->tqh_last = &(&a1)->next.tqe_next;

这两个就是重复的,只是给tqh_last赋值,尤其第一个感觉没什么用。
修改TAILQ_INSERT_TAIL,去掉*(head)->tqh_last = (elm);程序出错了。想不明白,这是为什么?
[解决办法]
#define TAILQ_HEAD(name, type) \
struct name { \
struct type *tqh_first; /* first element */ \
struct type **tqh_last; /* addr of last next element */ \
}

tqh_last 是指针(1)的指针(2),第一个给指针(1)赋值,第二个给指针的指针(2)的赋值.

*(&list)->tqh_last = (&a1);
(&list)->tqh_last = &(&a1)->next.tqe_next;
[解决办法]
画了画像个双向循环链表

读书人网 >C语言

热点推荐