写一个宏,计算结构体中某变量相对于首地址的偏移,并给出说明

#define OFFSETOF(s,name) (size_t)&(((s*)0)->name)
struct S
{
	int a;
	char c;
	double d;
};
#define OFFSETOF(s,name) (size_t)&(((s*)0)->name)
int main()
{
	printf("%zd\n", OFFSETOF(struct S, a));
	printf("%zd\n", OFFSETOF(struct S, c));
	printf("%zd\n", OFFSETOF(struct S, d));
	return 0;
}

因为是求偏移量,所以我们假设结构体的初始地址为0,然后强转成结构体指针类型,然后->找到成员,&取出成员的地址,然后强转成size_t类型,这样就取得了偏移量。

你可能感兴趣的:(算法,数据结构)