📜  OFFSETOF()宏(1)

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

OFFSETOF()宏

在C语言中,有时需要知道一个结构体中某个成员的偏移量,这时可以使用OFFSETOF()宏来获取。

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

其中,type表示结构体类型,member表示结构体中的某个成员。

OFFSETOF()宏的原理是将一个空指针类型强制转换成指向结构体类型的指针,然后通过取成员地址的方式来获取成员偏移量。

下面是一个示例程序:

#include <stdio.h>

struct person {
    char name[20];
    int age;
    double height;
};

int main() {
    size_t name_offset = OFFSETOF(struct person, name);
    size_t age_offset = OFFSETOF(struct person, age);
    size_t height_offset = OFFSETOF(struct person, height);

    printf("name offset: %zu\n", name_offset);
    printf("age offset: %zu\n", age_offset);
    printf("height offset: %zu\n", height_offset);

    return 0;
}

输出结果为:

name offset: 0
age offset: 20
height offset: 24

可以看出,OFFSETOF()宏可以很方便地获取结构体中各个成员的偏移量,从而辅助我们进行内存操作。需要注意的是,在使用OFFSETOF()宏时,必须保证结构体中所要获取的成员是存在的,否则可能会引发访问越界等错误。