offsetof 宏
这是在看书的时候遇到的,估计以后会用到,避免遗忘,先记下来吧。
一般形式:
这是在看书的时候遇到的,估计以后会用到,避免遗忘,先记下来吧。
一般形式:
#define offsetof(TYPE,MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
说明:
通过((TYPE *)0) 将0地址强制转换为TYPE结构类型中的指针;
通过((TYPE *)0)->MEMBER 访问TYPE结构中的MEMBER成员;
通过&(((TYPE *)0)->MEMBER)取出TYPE结构中的MEMBER成员的地址;
通过(size_t) (&(((TYPE *)0)->MEMBER))将结果转换为size_t类型;
巧妙之处在于将0地址强制转换为TYPE结构类型的指针,TYPE结构以内存空间首地址0作为起始地址,成员自然为偏移地址。
应用offsetof可以求出结构体中每个成员的偏移地址。