码迷,mamicode.com
首页 > 其他好文 > 详细

计算结构体内元素的偏移量宏

时间:2020-03-16 13:02:56      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:变量   定义   number   假设   size_t   偏移量   define   offsetof   fine   

#define offsetof(type,member) ((size_t) &((type *)0)->member)

该宏定义含义为:在不生成结构体实例的情况下计算结构体成员的偏移量。

一:结构体变量的某成员的地址等于该结构体变量的基址加上结构体成员变量在结构体中的偏移量

二:#define offsetof(type,member) ((size_t) &((type *)0xff)->member-0xff):这里假设type类结构体的

基地址为0xff,则成员变量number的地址为:0xff+sizeof((type*)->number),成员变量number的偏移量

为成员变量的地址减去结构体的基地址:所以成员变量number的偏移量为((type *)0xff)->member-0xff。

(type*)0:这个结构体变量的基址就是0。所以结构体成员变量的地址的大小在数值上就等于该结构体

成员在结构体中的偏移量。

三:(type*)0:将0地址转换为type*结构体指针。

四:(type *)0)->member:指向type*结构体的成员变量number。

五:&((type *)0)->member:取成员变量number的地址。

六: ((size_t) &((type *)0)->member):将成员变量number的地址转换为size_t类型。可以知道size_t是

无符号整形。

 

计算结构体内元素的偏移量宏

标签:变量   定义   number   假设   size_t   偏移量   define   offsetof   fine   

原文地址:https://www.cnblogs.com/ligei/p/12502971.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!