概述
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
struct s {
int i;
char c;
char d;
int a;
};
/* Output is compiler dependent */
printf("offsets: i=%ld; c=%ld; d=%ld a=%ldn",
(long) offsetof(struct s, i),
(long) offsetof(struct s, c),
(long) offsetof(struct s, d),
(long) offsetof(struct s, a));
printf("sizeof(struct s)=%ldn", (long) sizeof(struct s));
exit(EXIT_SUCCESS);
}
宏的头文件和声明:
#include <stddef.h>
size_t offsetof(type, member);
先上测试代码,结构体struct s的结构如上,占用内存空间12个字节,其中i占4个字节,为了内存对齐,c和d占了4个字节,a占四个字节。
- offsetof(struct s, i) 表示i成员在结构体struct s首地址的偏移地址,为0
- offsetof(struct s, c) 表示c成员在结构体struct s首地址的偏移地址,为4
- offsetof(struct s, d) 表示d成员在结构体struct s首地址的偏移地址,为5
- offsetof(struct s, a) 表示a成员在结构体struct s首地址的偏移地址,为8
最后
以上就是动听云朵为你收集整理的关于宏offsetof的全部内容,希望文章能够帮你解决关于宏offsetof所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复