C语言offsetof宏
目录
- 开头
- 1.什么是
offsetof
宏? - 2.
offsetof
宏的实际应用(这里只列举其一) - 求结构体a中的所有成员变量的偏移量
- ……
- 结尾
开头
大家好,我叫这是我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;
}
……
结尾
看到这里了,可以评论来互动一下我哦。
选自C语言中
offsetof
宏的简介 ↩︎