开头
大家好,我叫这是我58。今天,我们要学一下关于C语言中的offsetof
宏的知识。
1.什么是offsetof
宏?
offsetof
宏,来自于stddef.h
头文件,用来返回某一个结构体中的成员变量的偏移量,它的内部结构是这样子的:offsetof (type,member)
1,而它的内部是这样子的:((size_t)&(((type*)0)->member))
,其中,type
代表了某一个结构体,而member
则代表了这个结构体中的某一个成员变量,而且,这个宏的返回值的类型是size_t
,因为某一个结构体中的第一个成员变量的偏移量一定为0
,第二个成员变量的偏移量一定会比第一个成员变量的偏移量多一点,以此类推,不可能出现结构体得成员变量的偏移量为负数的情况,所以,这个宏的返回值的类型是size_t
,而如果把type
代入某一个结构体,member
代入另一个结构体的成员变量,就会报错,因为这个宏不能跨结构体来求出偏移量,在看到这里之后,接下来就要讲一下offsetof
宏的实际应用了。
2.offsetof
宏的实际应用(这里只列举其一)
求结构体a中的所有成员变量的偏移量
union as {
int ia;
long long l;
};
struct a {
int i;
char y;
union as a;
};
int main() {
printf("%d %d %d\n", offsetof(struct a, i), offsetof(struct a, y), offsetof(struct a, a));
return 0;
}
……
结尾
看到这里了,可以评论来互动一下我哦。