首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

两处赋值,感觉代码都一个意义,去了一个,程序出错

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

两处赋值,感觉代码都一个意思,去了一个,程序出错
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; 
[解决办法]
画了画像个双向循环链表

热点排行