看看这个宏:

lzr4304061988012 2008-10-28 07:46:24

#define offsetof(s,m) (size_t)&(((s *)0)->m)

在stddef.h中定义:
功能:取得数据结构s中成员m的偏移量:

不解?
...全文
109 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
太乙 2008-10-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lzr4304061988012 的回复:]
C/C++ code
(unsigned int) & 这个原理是什么?
[/Quote]

取其地址,转为uint
lzr4304061988012 2008-10-28
  • 打赏
  • 举报
回复
哦,偶看错了,谢谢2位o(∩_∩)o...
lzr4304061988012 2008-10-28
  • 打赏
  • 举报
回复

(unsigned int) & 这个原理是什么?
帅得不敢出门 2008-10-28
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

int main(void)
{
typedef struct
{
short b1;
int a1;
}ST1;

typedef struct
{
short b2;
int a2;
ST1 P1;
ST1 P2;
}ST2;
unsigned int offset;
offset = (unsigned int) &( ( (ST2*)0)->P1 );//offset = 8
cout << offset << "\n";
offset = (unsigned int) &( ( (ST2*)1)->P1 ) ;////offset = 9
cout << offset << "\n";
return 0;
}
Arthur_ 2008-10-28
  • 打赏
  • 举报
回复
define offsetof(s,m) (size_t)&(((s *)0)->m)

先取一个结构体某个元素的地址,然后把地址转成数字。
我们知道:它的偏移量 = 元素的地址 - 结构体的起始的地址。
而这个起始的地址 = 0, 所以...
帅得不敢出门 2008-10-28
  • 打赏
  • 举报
回复
取得数据结构s中成员m的偏移量
是对的
其其实是结构s在0地址处时成员m的地址

所以就是实际中的相对地址了.



70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧