C 语言库宏 - offsetof()
C 语言标准库 <stddef.h> 宏 offsetof(type, member-designator) 返回一个结构成员相对于结构开头的字节偏移量。返回值类型为 size_t
成员是由 member-designator 给定的,结构的名称是在 type 中给定的
头文件
#include <stddef.h>
宏声明
下面是 offsetof() 宏的声明
offsetof(type, member-designator)
参数
-
type:这是一个 class 类型,其中 member-designator 是一个有效的成员指示器
-
member-designator:这是一个 class 类型的成员指示器
返回值
该宏返回类型为 size_t ,表示 type 中成员的偏移量
范例
下面的范例演示了 offsetof() 宏的用法
/** * file: main.c * author: 简单教程(www.twle.cn) * * Copyright © 2015-2065 www.twle.cn. All rights reserved. */ #include <stddef.h> #include <stdio.h> struct address { char name[50]; char street[50]; int phone; }st; int main() { printf("address 结构中的 name 偏移 = %ld 字节\n", offsetof(struct address, name)); printf("address 结构中的 street 偏移 = %ld 字节\n", offsetof(struct address, street)); printf("address 结构中的 phone 偏移 = %ld 字节\n", offsetof(struct address, phone)); return(0); }
编译运行范例,输出结果如下
$ gcc main.c && ./a.out address 结构中的 name 偏移 = 0 字节 address 结构中的 street 偏移 = 50 字节 address 结构中的 phone 偏移 = 100 字节