📜  OFFSETOF()宏(1)

📅  最后修改于: 2023-12-03 15:33:16.888000             🧑  作者: Mango

OFFSETOF()宏介绍

OFFSETOF()宏是C语言提供的一个常用宏,用于计算结构体成员距离结构体首地址的偏移量。

语法

OFFSETOF(type, member)

参数说明:

  • type:结构体类型
  • member:结构体中某一成员的名称

返回值:成员距离结构体首地址的偏移量。

示例

下面举个例子说明OFFSETOF()宏的用法:

#include <stddef.h>
#include <stdio.h>

#define OFFSETOF(type, member) (size_t)&((type *)0)->member

struct test {
    int a;
    int b;
    char c;
};

int main() {
    size_t offset = OFFSETOF(struct test, c);
    printf("偏移量:%d\n", offset);
    return 0;
}

输出结果为:

偏移量:8

解释一下这个例子:

  • 在我们定义的test结构体中,首先有两个int类型的成员a和b,所以char类型的成员c距离结构体首地址有8个字节的偏移量。
  • OFFSETOF宏的作用就是计算这个偏移量。
  • 注意,为了避免将结构体的实例传给OFFSETOF(),我们传入一个指向type类型对象的空指针,然后通过这个指针获取指向member成员的指针,最后计算偏移量。

注意事项

  • OFFSETOF()宏不会对传入的参数进行任何类型检查,因此请谨慎使用。
  • 计算得到的偏移量的类型是size_t,需要使用%zu进行格式化输出。