QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1297|回复: 7

这句什么意思阿(里面的,不是define)

[复制链接]
发表于 2005-1-31 12:26:28 | 显示全部楼层 |阅读模式
#define list_entry(ptr, type, member) \
        ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
发表于 2005-1-31 15:12:26 | 显示全部楼层
(char*)(ptr)-(unsigned long)(&((type *)0)->menmber)
大概是地址运算,然后转为指定类型的指针作为最后的list入口
&((type *)0)->menmber,&取地址,((type *)0)不知道是什么,
回复

使用道具 举报

 楼主| 发表于 2005-1-31 20:47:45 | 显示全部楼层
了解  谢谢阿!
回复

使用道具 举报

发表于 2005-2-3 16:49:42 | 显示全部楼层
((type *)0)
表示从0开始计算,就象数组的下标一样。
你也可以改为((type *)1),不过这时的地址是从1开始了
回复

使用道具 举报

发表于 2005-2-4 12:41:14 | 显示全部楼层
一般用于计算某个数据结构在它自己的双向链表中的位置,memeber一般会是list_head结构
回复

使用道具 举报

发表于 2005-3-3 18:31:06 | 显示全部楼层
关注,谁能说的细点,再举个应用的例子呢
回复

使用道具 举报

发表于 2005-3-4 10:53:11 | 显示全部楼层
内核代码里这种例子太多了
#define prev_task(task) list_entry(task->tasks.prev, struct task_struct, tasks)
回复

使用道具 举报

发表于 2005-3-4 19:32:10 | 显示全部楼层
看到这样一篇文章,与大家共享http://www-900.ibm.com/developerworks/cn/linux/kernel/l-chain/index.shtml
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-6-16 08:30 , Processed in 0.124355 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表