首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

offsetof(s,m)解析「建议收藏」

到这里,有人可能会想到offsetof(那些没用过甚至没见过的朋友别急,后面马上会详解offsetof)来解决这个问题: /*offsetof获取数据成员在数据结构中的偏移量 比如成员f在...我想那些对 offsetof有较深理解的同志一定会这么办: /*类似于offsetof的定义*/ #define SIZEOF(s,m) ((size_t) sizeof(((s *)0)...offsetof对那些搞 C++ 的人可能很熟悉,因为offsetof类似于sizeof,也是一种系统操作符,你不用考虑它是怎么定义的。...在嵌入式系统里,不同开发商,不同架构处理器和编译器都有不同的offsetof定义形式: /* Keil 8051 */ #define offsetof(s,m) (size_t)&((.../* GNU GCC 4.0.2 */ #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) 虽然定义形式不同,

27820

C语言 | offsetof宏和container_of宏

废话不多说,今天要说的两个宏分别是offsetof和container_of,第一个宏是用来计算结构体中某个成员相对于结构体的偏移量,第二个宏是已知指向结构体某个成员的指针,来计算结构体的指针。...一、offsetof 这个宏是用来计算结构体某个成员的偏移量的,所以我们先来定义一个简单的结构体类型,来说明。...二、container_of 上面介绍了offsetof宏的使用,相信不是那么难理解,那么这个宏就看起来复杂多了,但是,其实只要把思路理清楚了,也不是那么复杂。...((char *)__mptr -offsetof(type, member));将指针转化为char类型,并且减去偏移量。...(type *)((char *)__mptr -offsetof(type, member));最后将获取的指针再转化为type类型。 可能前面几句可以理解,后面就糊涂了。

2.1K30

【C语言】库宏offsetof(结构体成员偏移量计算宏)

个人主页:修修修也 所属专栏: ⚙️操作环境:Visual Studio 2022 一.offsetof简介 因此,宏offsetof的作用是: 当你传入结构体的类型及其成员时,它会返回该成员在结构体中的偏移量...二.offsetof的使用 如下,我们使用offsetof打印一下结构体foo中,成员a,成员b及成员c相对于首地址的偏移量分别是多少: #include #include...printf ("offsetof(struct stu,ch) is %d\n",(int)offsetof(struct stu,ch)); printf ("offsetof(struct...stu,sz) is %d\n",(int)offsetof(struct stu,sz)); printf ("offsetof(struct stu,age) is %d\n",(int)offsetof...offsetof(struct stu,age) is 8 我们画图验证一下: 三.offsetof的实现 库函数中对offsetof的实现是这样的: #define OFFSET(type,member

7310
领券