计算结构体中某个元素相对结构体首字节地址的偏移量

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fengfeng0328/article/details/86775905

计算结构体中某个元素相对结构体首字节地址的偏移量,参考代码如下:

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

 代码解析:

(TYPE *)0 是一个强制类型转换,把 0 地址强制类型转换成一个指针,这个指针指向一个 TYPE 类型的结构体变量,实际上这个结构体变量可能不存在内存空间中,但是只要不去解引用这个指针就不会出错。

对于 (((TYPE *)0)->MEMBER) 来说,(TYPE *)0 表示一个 TYPE 类型的结构体指针。通过指针来访问这个结构体变量的 MEMBER 元素,&((TYPE *)0)->MEMBER 等效于 &(((TYPE *)0)->MEMBER) - &(((TYPE *)0))

猜你喜欢

转载自blog.csdn.net/fengfeng0328/article/details/86775905