原理:
虚拟一个TYPE类型的结构体变量,通过TYPE.MEMBER的方式来访问MEMBER成员,进而得到MEMBER成员相对于整个结构体首地址的偏移量。
作用:为接下来的container_of宏的讲解出现做铺垫
offsetof宏: #define offsetof(TYPE,MEMBER) ((int) &((TYPE *)0)->MEMBER)
接下来看看例程就明白了,其实这个宏挺简单的,&((TYPE *)0)->MEMBER其实相当于得到了成员的偏移减去0地址偏移,也就是结构体的首地址,进而就得到了该成员相当于整个结构体的偏移量。
#include <stdio.h>
#define offsetof(TYPE,MEMBER) ((int) &((TYPE *)0)->MEMBER)
#pragma pack(4)
struct ptr
{
char a ;
sho