container_of函数⽤法
例⼆:
它的作⽤显⽽易见,那就是根据⼀个结构体变量中的⼀个域成员变量的指针来获取指向整个结构体变量的指针。⽐如,有⼀个结构体变量,其定义如下:
struct demo_struct { type1 member1; type2 member2; type3 member3; type4 member4; }; struct demo_struct demo;
同时,在另⼀个地⽅,获得了变量demo中的某⼀个域成员变量的指针,⽐如:
type3 *memp = get_member_pointer_from_somewhere();
此时,如果需要获取指向整个结构体变量的指针,⽽不仅仅只是其某⼀个域成员变量的指针,我们就可以这么做:
1. struct demo_struct *demop = container_of(memp, struct demo_struct, member3);
⾸先,我们将container_of(memp, struct demo_struct, type3)根据宏的定义进⾏展开如下:
struct demo_struct *demop = ({ /
typeof的用法const typeof( ((struct demo_struct *)0)->member3 ) *__mptr = (memp); / (struct demo_struct *)( (char *)__mptr -
offsetof(struct demo_struct, member3) );})
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论