一个简单程序演示container_of的原理

container_of是内核中常用到的一个宏,它的功能是从结构体内成员的地址得到结构体本身的地址。

下面用一个应用程序演示这个功能如何实现的。



#include <stdio.h>


struct temp{
    int a;
    char b;
    double c;
};

struct temp t[3]={
            {1,'a',1.1},
            {2,'b',2.2},
            {3,'c',3.3},
};

/*主程序,从t[1].b的地址,得到t[1]的地址,进而可以访问数组t的所有成员*/
int main()
{
    char *pch=&(t[1].b);
    struct temp *p;

    //下句是关键
    p=(struct temp *)(pch-(char *)(&(((struct temp *)0)->b)));

    //从p依次输出t[0].b,t[1].a,t[2].c的内容。
    printf("%c\n",(p-1)->b);
    printf("%d\n",p->a);
    printf("%lf\n",(p+1)->c);

    return 0;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值