您的位置:首页 > 其它

把“0”强制转化为结构体指针类型得到成员变量的偏移量

2017-07-12 22:44 309 查看
#include <stdio.h>

  

#define      OFFSET(TYPE, MEMBER )     &((TYPE *)0)->MEMBER 

  

struct   A

{

    int a;
char b[20];
double c;  
char  d;

};

void    main()

{

    

  int  offsetA= (int )  (    &((A *)0)->a   );  //偏移量

  int  offsetB= (int )  (     OFFSET(A, b)      );  

  int  offsetC= (int )  (    &((A *)0)->c   );

  int  offsetD= (int )  (     OFFSET(A, d)  );

/*   把“0”强制转化为指针类型,则该指针一定指向“0”(数据段基址)。

     因为指针是“A*”型的,所以可取到以“0”为基地址的一个type型变量member域的地址.

     那么这个地址也就等于member域到结构体基地址的偏移字节数。

 */ 


  

  printf("%d   ,%d,   %d,   %d\n",  offsetA,offsetB,offsetC ,offsetD   );

// 打印 0   ,4,   24,   32

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐