offsetof 是一个宏,定义在 C 标准库的 <stddef.h> 头文件中。它用于计算结构体成员相对于结构体起始位置的偏移量。这个宏在编写与硬件相关的代码或需要直接操作内存布局的代码时特别有用。
offsetof 宏的定义通常如下:
#define offsetof(type, member) ((size_t) &(((type *)0)->member))
这里是一个简单的例子,展示如何使用 offsetof 宏:
#include <stdio.h>
#include <stddef.h>
struct MyStruct {
int a;
double b;
char c;
};
int main() {
printf("Offset of a: %zu\n", offsetof(struct MyStruct, a));
printf("Offset of b: %zu\n", offsetof(struct MyStruct, b));
printf("Offset of c: %zu\n", offsetof(struct MyStruct, c));
return 0;
}
在这个例子中,offsetof(struct MyStruct, a) 将返回成员 a 在结构体 MyStruct 中的偏移量,offsetof(struct MyStruct, b) 和 offsetof(struct MyStruct, c) 类似。
输出结果将显示每个成员相对于结构体起始位置的字节偏移量。例如:
Offset of a: 0
Offset of b: 8
Offset of c: 16
请注意,具体的偏移量可能会因编译器和平台的不同而有所不同,因为它们可能会对结构体进行不同的内存对齐优化。