Linux中offsetof宏的含義是什么

小樊
83
2024-09-06 20:20:22

在 Linux 系統(tǒng)中,offsetof 宏用于計(jì)算結(jié)構(gòu)體成員在內(nèi)存中的偏移量

offsetof 宏的定義如下:

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

其中,type 是結(jié)構(gòu)體類型,member 是結(jié)構(gòu)體中的成員變量。這個(gè)宏通過將一個(gè)指向結(jié)構(gòu)體的空指針((type *)0)轉(zhuǎn)換為一個(gè)指向該成員變量的指針,然后獲取該指針的值,從而得到該成員相對(duì)于結(jié)構(gòu)體起始地址的偏移量。

例如,假設(shè)有以下結(jié)構(gòu)體定義:

struct Student {
    int id;
    char name[20];
    float score;
};

要計(jì)算 name 成員相對(duì)于結(jié)構(gòu)體起始地址的偏移量,可以使用 offsetof 宏:

size_t name_offset = offsetof(struct Student, name);

這樣,name_offset 就是 name 成員在結(jié)構(gòu)體中的偏移量。

0