#define offsetof(TYPE, MEMBER) ((int) &((TYPE *)0)->MEMBER) //通过结构体指针得到指定元素的偏移量
// TYPE是结构体类型,MEMBER是结构体中一个元素的元素名
// 宏返回member元素相对于整个结构体变量的首地址的偏移量,类型是int
//通过结构体元素指针得到结构体的指针
#define container_of(ptr, type, member) ({
// ptr是指向结构体元素member的指针,type是结构体类型,member是结构体中一个元素的元素名
const typeof (((type *)0)->member) * __mptr = (ptr);
(type *)((char *)__mptr - offsetof(type, member));
})
// 这个宏返回的就是指向整个结构体变量的指针,类型是(type *)
//typeof作用:typeof(a)时由变量a得到a的数据类型(一般类型定义变量,这里反过来)