在 Linux 系統中,offsetof
宏用于計算結構體成員在內存中的偏移量
offsetof
宏的定義如下:
#define offsetof(type, member) ((size_t)&((type *)0)->member)
其中,type
是結構體類型,member
是結構體中的成員變量。這個宏通過將一個指向結構體的空指針((type *)0
)轉換為一個指向該成員變量的指針,然后獲取該指針的值,從而得到該成員相對于結構體起始地址的偏移量。
例如,假設有以下結構體定義:
struct Student {
int id;
char name[20];
float score;
};
要計算 name
成員相對于結構體起始地址的偏移量,可以使用 offsetof
宏:
size_t name_offset = offsetof(struct Student, name);
這樣,name_offset
就是 name
成員在結構體中的偏移量。