网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月06日
漏签
0
天
c语言吧
关注:
790,957
贴子:
4,298,305
看贴
图片
吧主推荐
视频
游戏
7
回复贴,共
1
页
<<返回c语言吧
>0< 加载中...
offsetof宏定义
只看楼主
收藏
回复
V3奥特曼
强能力者
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
大侠,老师们offsetof的宏定义我不理解啊,这个0和箭头是什么意思呢
V3奥特曼
强能力者
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
经典自问自答
遂逸
麻婆豆腐
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
#define offsetof(TYPE, MEMBER) (int)(&(((TYPE*)0)->MEMBER))
1.(TYPE*)0 将0强转为TYPE类型的指针,且指向了0地址空间
2.(TYPE*)0->MEMEBER 指向结构体中的成员
3.&((TYPE*)0->MEMBER) 获取成员在结构体的位置,因为起始为0,所以获取的地址即为实际的偏移地址
(TYPE *)0,将 0 强制转换为 TYPE 型指针,记 p = (TYPE *)0,p是指向TYPE的指针,它的值是0。那么 p->MEMBER 就是 MEMBER 这个元素了,而&(p->MEMBER)就是MENBER的地址,而基地址为0,这样就巧妙的转化为了TYPE中的偏移量。再把结果强制转换为int型。
遂逸
麻婆豆腐
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
这个宏在头文件stddef.h中定义。
遂逸
麻婆豆腐
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
遂逸
麻婆豆腐
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
在gcc中,这个宏在头文件stddef.h中定义。
/* Offset of member MEMBER in a struct of type TYPE. */
#define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER)
而__builtin_offsetof是GCC的内置函数。可以认为它的实现与((size_t) &((TYPE *)0)->MEMBER)这段代码是一致的。
遂逸
麻婆豆腐
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
也可以自己定义
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示