内核代码中
#define container_of(ptr, type, member) \
(type *)((char *)(ptr) - (char *) &((type *)0)->member)
用于在已知结构体里面成员member和该成员的指针ptr(就是地址)和结构体类型type, 返回该成员所在的结构体的首地址。
1. (type *)((char *)(ptr):结构体里面已知成员的地址
2. (char *) &((type *)0)->member:设该结构体struct的基地址为0,member的地址就是相对于struct首地址的偏移量.该成员在结构体内的偏移地址
3.相减就是该结构体的首地址。