在 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)體中的偏移量。