#define
offsetof
(TYPE, MEMBER) ((
size_t
) &((TYPE *)0)->MEMBER)
#define
container_of
(
ptr
,
type
, member) ({ /
const typeof( ((
type
*)0)->member ) *__mptr = (
ptr
); /
(
type
*)( (char *)__mptr -
offsetof
(
type
,member) );})
typedef struct{
int
a
;
int
b
;
int
c
;
}
Me_t
;
例如:
//
得到
Me_t
的成员
b,
在结构中的位置
obj_b = 4
int
obj_b =
offsetof(
Me_t
, b);
例如
:
Me_t
me_obj
;
Me_t*
me_obj_addr
= NULL;
//
得到
me_obj
对象结构的实际地址
me_obj_addr = container_of(&me_obj.b, Me_t, b);
其中
const typeof( ((type *)0)->member ) *__mptr;
在这里可以理解成
const int *__mptr;