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;
}