Bootstrap

【C语言】container_of的意义

根据结构体变量的成员,获得该结构体变量的首地址 。

#define    offsetof(TYPE, MEMBER)    ( (size_t)&((TYPE *)0)->MEMBER )

#define    constainer_of(ptr, type, member)    ({                \
                                                                 \
    const typeof( (type *)0)->member))       *__mptr = (ptr);    \

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

直接用结构体成员,减去该成员在结构体内的偏移,就可以得到该结构体的首地址。

用处:

在一个层层包含的程序中,传入函数的可能是某个结构体变量的成员,通过container_of可以获得该成员对应的变量的首地址。

;