#define list_entry(ptr, type, member)
((type*)((char*)(ptr)-(unsigned long)(&((type*)0)->member)))
的作用、功能。
该方法就是 通过 type类型结构体 的 成员变量 member 的地址 去获取 该结构体的地址。。
而 (unsigned long)(&((type*)0)->member) type类型结构体 中 成员变量 member 的地址在该结构体中的偏移量。。
我把问题简化一下。 (type*)0 的作用、功能。
C语言中 (type*)X 表示将操作 X 强制类型转换为 type* 类型(即 type* 类型指针)。
这里是将 0 强制类型转换为 type* 类型, 0 成为 type* 类型。
一个指向 NULL 的 type* 类型 指针 和 这里的 (type*)0 是等价的(ansi/iso-c99 标准规定 NULL 指针为 0x00000000, 即内存中的“第 0 号地址”)。
到这里,大家应该可以明白,上面的 list_entry 的意思了吧? 这个是 unix / linux 里有 _list.h 文件的。
————————————————
版权声明:本文为CSDN博主「Mr.Liuqh」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/MrLiuqh/article/details/89316662