C offsetof

void test4()
{

	struct student {
		char a;
		int b;
	};

	struct student stu = {1,1};
	struct student* p = &stu;


	printf("addr is :%d\r\n", (char*)&(stu.b) - (char*)&(stu.a));
	printf("addr is :%d\r\n", (char*)&(p->b) - (char*)&(p->a));
	printf("addr is :%d\r\n", (int*)&(p->b) - (int*)&(p->a));      # 这个的输出为1, 需要理解步进的含义
	printf("addr is :%d\r\n", (int)&(p->b) - (int)&(p->a));
	printf("addr is :%d\r\n", (int)&(p->b) - (int)p);
	//printf("addr is :%d\r\n", (void*)&(p->b) - (void*)&(p->a)); #这个会提示类型未定义.
	printf("addr is :%d\r\n", offsetof(struct student,b));        #借助 <stddef.h>

}

通过手动的方式去计算, 结构体成员在结构体中的偏移量是多少, 推荐使用 char* 强转(在没有使用底层的api 时)

 

void test5()
{
	
	struct person {
		char a;
		int b;
	};


	struct student
	{
		char a;
		int b;
		struct person p;
	};

	struct student stu = { 1,2,2,3 };
	
	int offset1 = offsetof(struct student, p);
	int offset2 = offsetof(struct person, b);

	printf("%d\r\n", *(int*)((char*)&stu+offset1+offset2));
	printf("%d\r\n", ((struct person*)((char*)&stu + offset1))->b);
}

 

 

转载于:https://my.oschina.net/u/1579560/blog/3052861

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值