一个简单程序演示container_of的原理
2012-09-22 23:25
197 查看
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;
}
下面用一个应用程序演示这个功能如何实现的。
#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;
}
相关文章推荐
- 一个简单的小程序演示Unity的三种依赖注入方式
- 一个简单地C语言程序展示RSA加密原理
- SpringBoot +maven +idea 最简单的一个web程序的演示流程
- [置顶] [编译原理读书笔记][第2章 一个简单的语法制导程序]
- VB面向对象编程的一个简单的演示程序
- 一个简单的DFS(深度优先搜索)算法加剪枝技术的程序演示
- 一个非常简单完整的聊天室演示程序,推荐初学者下载
- 编写最简单的SQL解析程序(原理演示)
- 一个简单的小程序演示Unity的三种依赖注入方式
- 一个简单的小程序演示Unity的三种依赖注入方式
- FileOutputStream 类 和 FileInputStream类的简单介绍,附代码演示。以及一个复制媒体文件的小程序。
- 一个简单的小程序演示Unity的三种依赖注入方式
- FileOutputStream 类 和 FileInputStream类的简单介绍,附代码演示。以及一个复制媒体文件的小程序
- C#事件演示程序1)——一个最简单的C#事件处理程序
- 一个简单的小程序演示Unity的三种依赖注入方式
- VC编译下对一个超简单的缓冲区溢出程序的原理解析以及c程序的汇编分析
- 分享一个简单的资源管理器程序,主要是演示下LINQ在C#开发中的运用
- 一个简单的编译原理词法语法语义分析程序
- Ajax完成一个简单的HelloWorld程序
- 用C++编写一个随机产生多个两位数四则运算式子的简单程序