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

来源:互联网 发布:怎么注册免费的域名 编辑:程序博客网 时间:2024/04/30 15:17

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;

}

原创粉丝点击