社区
C语言
帖子详情
前一阵子百度来校园招聘时的一道笔试题
xlbdan
2007-09-25 11:52:35
#define offset(TYPE,MEMBER) (size_t & ((TYPE*)0))->MEMBER
问这个宏是什么意思?
...全文
1170
19
打赏
收藏
前一阵子百度来校园招聘时的一道笔试题
#define offset(TYPE,MEMBER) (size_t & ((TYPE*)0))->MEMBER 问这个宏是什么意思?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
InsideKernel
2008-04-09
打赏
举报
回复
在stddef.h中有类似定义,如下:
#define offsetof(s,m) (size_t)&(((s *)0)->m)
(s *)0
的意思就是指从这个结构体变量是从0地址开始的;
&(((s *)0)->m)
取该结构体变量(首地址是0)m成员的地址;
返回的结果是m在结构体中的偏移(以字节为单位)。
zzyjsjcom
2008-04-01
打赏
举报
回复
这个宏在使用的过程中 要用字节指针:
下面有个测试代码 , 你可以跑跑看:
#define offset(TYPE,MEMBER) ((size_t)(&((TYPE *)0)->MEMBER))
typedef struct t_tag
{
int a;
int b;
int c;
}t;
int main()
{
t test;
unsigned char *pt = (unsigned char *)&test;
int move = offset(t, c);
test.a = 3;
test.b = 4;
test.c = 5;
printf("%d ", *((int *)pt));
pt = pt + move;
printf("%d", *((int *)pt));
return 0;
}
运行结果 :3 5
qld001
2007-09-26
打赏
举报
回复
flyerwing()
很深了,学校是搞不到那个级别吧!
hjzwl1018()
狠了去了```这些东西哪能学到?这些属于哪块编程?
=========================================================================
自学!大学期间不能指望学校教你所有东西,要学会自己找食吃!
xlbdan
2007-09-26
打赏
举报
回复
sxlengwa的解释挺好的,不过我当时没抄下来,现在印象中就是我写的那样的,当时也没弄出来...
flyerwing
2007-09-26
打赏
举报
回复
很深了,学校是搞不到那个级别吧!
hjzwl1018
2007-09-26
打赏
举报
回复
狠了去了```这些东西哪能学到?这些属于哪块编程?
NKLoveRene
2007-09-25
打赏
举报
回复
看来baidu到哪都用一套题啊
所以笔试前先在网上搜搜看有没有今年的笔试题出来,呵呵
Treazy
2007-09-25
打赏
举报
回复
我关心的是表达式中的0
求偏移那显而易见
关键这个0难道不能让大家想到些什么吗?
我能想到的就是
我上面提到的选择入口函数!
珍惜生命远离CPP
2007-09-25
打赏
举报
回复
C库 宏 offsetof
lbaby
2007-09-25
打赏
举报
回复
member 在type中偏移量= member 的地址 - type地址
如果直接设type地址为0的话,那么member的地址就是偏移量了
Treazy
2007-09-25
打赏
举报
回复
oo(为了名副其实,努力学习oo技术ing) ( ) 信誉:110 2007-09-25 12:03:15 得分: 0
求member在struct中的偏移
-----------------------------------
求偏移是这个宏嘛?难道看offset就清楚了?
还请给予解释!
Treazy
2007-09-25
打赏
举报
回复
#define offset(TYPE,MEMBER) (size_t & ((TYPE*)0))->MEMBER
-------------------------------------
看表达式MEMBER应该是TYPE的成员
将0强制转换为指向为类型为TYPE的指针
并将类型size_t与上此指针,并将结果指向其成员MEMBER
猜想,在0入口开始应该是很多函数入口的指针,用这个宏可以强制从指定入口开始
执行程序。当然这里只是选择哪个成员。
oo
2007-09-25
打赏
举报
回复
求member在struct中的偏移
sxlengwa
2007-09-25
打赏
举报
回复
#define offset(TYPE,MEMBER) (size_t)(&((TYPE*)0)->MEMBER)
写成这样要好点
那个不是与,失去地址,然后强制转换为 size_t 类型
hunter0022
2007-09-25
打赏
举报
回复
应该是这样就好理解了:(size_t) & ((TYPE*)0)->MEMBER
随后就像楼上的几位兄弟说的,通过偏移取成员再取地址,得其偏移。
当然也可以把0改成任意的数。只不过要将偏移的结果减去这个数。
hunter0022
2007-09-25
打赏
举报
回复
hi,楼主,你看你的宏是不是抄错了呀?size_t是一种类型,怎么可能和一个东西去&呢?
manrenmanren
2007-09-25
打赏
举报
回复
你好像写错了 应该是这样的吧
#define offset(TYPE,MEMBER) (size_t) & (((TYPE*)0))->MEMBER
我啃
2007-09-25
打赏
举报
回复
offsetof
you can find the useful macro in the cstddef
get the offset of a certain filed in the struct
原来百度就这种水平?
lianhd
2007-09-25
打赏
举报
回复
你要是稍微看过一点Linux内核代码, 就明白了呵呵
Delpih 13.1控件之《AVP虚拟化系统》简要使用手册图片显示完整版.7z
Delpih 13.1控件之《AVP虚拟化系统》简要使用手册图片显示完整版.7z
java面试题集和
笔试题
汇总
代码转载自:https://pan.quark.cn/s/a4b39357ea24 关于Java的面试资源、面试题库以及
笔试题
的集合资料,关于Java的面试资源、面试题库以及
笔试题
的集合资料,关于Java的面试资源、面试题库以及
笔试题
的集合资料,涵盖了基础面试问题、Java Web面试问题、JAVA面试题库.txt以及分布式相关面试问题的汇编.pdf。期待这些资料能够对您提供有效的支持!!
豆包DeepSeek收录优化系统 GEO关键词排名工具 企业AI搜索流量获客
核心功能全包含: 覆盖主流平台:支持DeepSeek、豆包、文心一言、腾讯元宝等六大模型。 AI智能创作:内置文章在线AI写作功能,内容源源不断。 精准获客:支持高检索量关键词筛选,锁定精准流量。 全自动发布:支持文章自动发布,对接权威媒体平台。 品牌定制:支持自建知识库、图片素材库,打造专属品牌形象。 数据透明:提供各大模型关键词反馈报表,效果看得见。 适用人群: 适用于工厂、企业、商务服务、销售经理等各行各业。 操作简单,支持月卡/年卡,灵活使用,低成本维持优化效果。
多步骤规范.md.md
多步骤规范.md.md
C语言
70,038
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章