首页 > 其他 > 详细

offsetof宏---个人笔记

时间:2014-03-15 07:44:05      阅读:481      评论:0      收藏:0      [点我收藏+]

  标准库里面提供的offsetof(t,m)宏,用来计算两个变量在内存中的地址偏移量

bubuko.com,布布扣
#include <stdio.h>
//原型: #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) /* #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) 对这个宏的讲解我们大致可以分为以下4步进行讲解: 1、( (TYPE *)0 ) 0地址强制 "转换" 为 TYPE结构类型的指针; 2、((TYPE *)0)->MEMBER 访问TYPE结构中的MEMBER数据成员; 3、&( ( (TYPE *)0 )->MEMBER)取出TYPE结构中的数据成员MEMBER的地址; 4、(size_t)(&(((TYPE*)0)->MEMBER))结果转换为size_t类型。 宏offsetof的巧妙之处在于将0地址强制转换为 TYPE结构类型的指针, TYPE结构以内存空间首地址0作为起始地址,则成员地址自然为偏移地址。 可能有的读者会想是不是非要用0呢?当然不是,我们仅仅是为了计算的简便。 也可以使用是他的值,只是算出来的结果还要再减去该数值才是偏移地址。 */ typedef struct stu1{   int a;   char b[1];   int c; }stu1; void main() {   printf("offsetof(stu1,a):\t%d\n",offsetof(stu1,a));   printf("offsetof(stu1,b):\t%d\n",offsetof(stu1,b));   printf("offsetof(stu1,c):\t%d\n",offsetof(stu1,c));   printf("sizeof(stu1) :\t%d\n",sizeof(stu1)); }
bubuko.com,布布扣

offsetof(stu1,a): 0

offsetof(stu1,b): 4
offsetof(stu1,c): 8
sizeof(stu1) : 12
Press any key to continue

offsetof宏---个人笔记,布布扣,bubuko.com

offsetof宏---个人笔记

原文:http://www.cnblogs.com/chengliangsheng/p/3600935.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!