contatiner_of宏

来源:互联网 发布:国家地震数据共享中心 编辑:程序博客网 时间:2024/06/03 22:59

这个宏返回的就是指向整个结构体变量的指针,类型是(type*)


用结构体某个元素的地址得到这个结构体的首地址


ptr是指向结构体元素member的指针,type是结构体类型,member是结构体中一个元素的元素名


#define container_of(ptr, type, member) ({ \

const typeof(((type *)0)->member) * __mptr = (ptr);\

(type *)((char *)__mptr - offsetof(type, member)); })


1、(type *)0 将0地址的指针强制转换为type类型

2、((type *)0)->member 指向该地址的元素

3、typeof(((type *)0)->member) typeof的作用是获得元素的类型,此处作用是获得该元素的类型,const的是设置内容不可变,此处作用是指针指向的内容不可变

4、typeof(((type *)0)->member) * __mptr = (ptr) 因为传入的指针不能传入它的类型,所以通过这些步骤获取指针类型,ptr只是地址值没有类型;

5、(type *)((char *)__mptr - offsetof(type, member)) offsetof宏作用是得到该元素对于首地址的偏移量,该元素的地址 - 偏移量,返回该结构体的首地址


原创粉丝点击