offsetof函數是C語言中的一個宏,用于獲取結構體或者聯合體中成員的偏移量。
其作用是返回指定成員在結構體或者聯合體中的偏移量,以字節為單位。偏移量是指成員相對于結構體或者聯合體起始地址的偏移量。
offsetof宏的定義如下:
#define offsetof(type, member) ((size_t) &((type *)0)->member)
其中,type表示結構體或者聯合體的類型,member表示結構體或者聯合體的成員。
使用示例:
#include <stddef.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;
}
上述示例中,offsetof函數分別獲取了結構體Person中name、age和height成員的偏移量,并打印出來。
通過offsetof函數,可以在編程中準確地獲取結構體或者聯合體中各個成員的偏移量,便于進行指針運算和訪問成員。