2024.4.13
offsetof 宏,用来记录结构体成员相对于结构体的偏移量
用法:offsetof(type,number)
struct S
{
int a;
char c;
}
int p=offsetof(S,c);
此时p的值为4
模拟实现offsetof:
//将结构体首地址设置为0,则结构体成员 的地址 就是对应的偏移量。
#define OFFSETOF(struct_name,member_name) \
(int)&(((struct_name*)0)->member_name)
相当于地址相减,但是地址相减的值与指针指向的内容的数据类型有关,同样差8个字节,char与int分别就差8和2
注意,此处用到了续行符 \ ,在一行的末尾添加反斜杠 \ 可以把下一行看做这一行,通常用于宏定义或者长字符串续行。