zoukankan      html  css  js  c++  java
  • offsetof宏---个人笔记

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

    #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): %d ",offsetof(stu1,a));   printf("offsetof(stu1,b): %d ",offsetof(stu1,b));   printf("offsetof(stu1,c): %d ",offsetof(stu1,c));   printf("sizeof(stu1) : %d ",sizeof(stu1)); }

    offsetof(stu1,a): 0

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

  • 相关阅读:
    WIN10下搭建reactnative开发Android环境
    node使用JsonWebToken 生成token,完成用户登录、登录检测
    SAP 学习网站汇总
    HTML5 学习网站收集
    优化 优化网站设计
    IoC容器 Spring.NET
    ORACLE 简介及安装
    MVC PureMVC
    HTML5 概要认识
    知识点 NHibernate
  • 原文地址:https://www.cnblogs.com/chengliangsheng/p/3600935.html
Copyright © 2011-2022 走看看