1offsetof 函数解析 .offsetof(s,m)解析 offsetof(s,m)解析
 2offsetof 函数解析 . 
 3offsetof 函数解析 .今天看代码时,发现一个有用的东东,offsetof(s,m),这是一个宏,定义如下:
 4offsetof 函数解析 .
 5offsetof 函数解析 . #define offsetof(s,m) (size_t)&(((s *)0)->m)
 6offsetof 函数解析 . 
 7offsetof 函数解析 . 然后到网上查了一下,发现还真的是很有用,附带一位大侠的解说:
 8offsetof 函数解析 .
 9offsetof 函数解析 .  struct   AAA   
10

 

另外:

 

offsetof(TYPE, MEMBER)
该宏在Linux内核代码(版本2.6.22)中定义如下:
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER);
 
分析:
(TYPE *)0,将 0 强制转换为 TYPE 型指针,记 p = (TYPE *)0,p是指向TYPE的指针,它的值是0。那么 p->MEMBER 就是 MEMBER 这个元素了,而&(p->MEMBER)就是MENBER的地址,而基地址为0,这样就巧妙的转化为了TYPE中的偏移量。再把结果强制转换为size_t型的就OK了,size_t其实也就是int。
typedef __kernel_size_t  size_t;
typedef unsigned int __kernel_size_t;   
 
可见,该宏的作用就是求出MEMBER在TYPE中的偏移量。

 

相关文章:

  • 2022-12-23
  • 2021-11-02
  • 2021-08-30
  • 2022-12-23
  • 2021-10-28
  • 2022-12-23
  • 2022-12-23
  • 2021-12-04
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-09-30
  • 2021-10-11
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案