C语言 <stddef.h> offsetof 宏

  • 描述

    C库宏offsetof(type,member-designator)宏产生一个size_t类型的常数整数,它是结构成员从结构开始处的字节偏移量。成员由成员标识符指定,结构的名称以类型指定。
  • 声明

    以下是offsetof宏的声明,具体取决于编译器。
    
    offsetof(type, member-designator)
    
    参数
    • type - 这是成员指定者为有效成员指定者的类类型。
    • member-designator - 这是类类型的成员指示符。
  • 返回值

    此宏返回type_t类型的值,它是type中成员的偏移值。
    示例
    以下示例显示offsetof()宏的用法-
    
    #include <stddef.h>
    #include <stdio.h>
    
    struct address {
       char name[50];
       char street[50];
       int phone;
    };
       
    int main () {
       printf("name offset = %d byte in address structure.\n",
       offsetof(struct address, name));
    
       printf("street offset = %d byte in address structure.\n",
       offsetof(struct address, street));
    
       printf("phone offset = %d byte in address structure.\n",
       offsetof(struct address, phone));
    
       return(0);
    } 
    
    尝试一下
    让我们编译并运行以上程序,这将产生以下结果-
    
    name offset = 0 byte in address structure.
    street offset = 50 byte in address structure.
    phone offset = 100 byte in address structure.