c 语言中自定义Handel使用
2014-05-14 11:50
106 查看
项目中有个函数使用到了自定义的Handel,刚开始始终搞不懂是什么意思
具体看下:
typedef int handel
typedef struct node
{
int a;
int b;
char c[10];
}nd;
void connect(handel *han)
{
nd* nd1 = (nd*) malloc(sizeof(nd));
nd1->a = 10; nd1->b =20;
strcpy(nd1->c,"hello");
*han = (handel)nd1;
}
int main()
{
handel a;
connect(&a);
nd *nd2 = (nd*)a;
printf("%d\n",nd2->a);
printf("%s\n",nd2->c);
return 0;
}
通过程序发现,实际上Handel 存放是nd结构体的地址,通过强制可以相互转换。
既然程序的意思是想变改一个结构休,那为什么不直接把结构体系做为一个参数,直接传参呢,而采用传入一个int型来存储它的地址 。
我想应该是这样的,如果想让结构体创建在堆上,那么在函数外部必会出现 nd* nd1 = (nd*) malloc(sizeof(nd)); 而需要再修改它的数据,就要把nd1 的地址传到函数中,这样使用程序看起来更复杂,如果是在函数中使用malloc的话,只需要传入一个参数来记录它的地址 ,在不需要使用的时候 ,可以通过它的地址来free掉。
具体看下:
typedef int handel
typedef struct node
{
int a;
int b;
char c[10];
}nd;
void connect(handel *han)
{
nd* nd1 = (nd*) malloc(sizeof(nd));
nd1->a = 10; nd1->b =20;
strcpy(nd1->c,"hello");
*han = (handel)nd1;
}
int main()
{
handel a;
connect(&a);
nd *nd2 = (nd*)a;
printf("%d\n",nd2->a);
printf("%s\n",nd2->c);
return 0;
}
通过程序发现,实际上Handel 存放是nd结构体的地址,通过强制可以相互转换。
既然程序的意思是想变改一个结构休,那为什么不直接把结构体系做为一个参数,直接传参呢,而采用传入一个int型来存储它的地址 。
我想应该是这样的,如果想让结构体创建在堆上,那么在函数外部必会出现 nd* nd1 = (nd*) malloc(sizeof(nd)); 而需要再修改它的数据,就要把nd1 的地址传到函数中,这样使用程序看起来更复杂,如果是在函数中使用malloc的话,只需要传入一个参数来记录它的地址 ,在不需要使用的时候 ,可以通过它的地址来free掉。
相关文章推荐
- Jinja2模版语言自定义filter的使用
- 使用Java语言开发微信公众平台(八)——自定义菜单功能
- Source Insight使用之添加自定义语言
- go语言 自定义类型的时候ReadFull如何使用
- javaSE_8系列博客——Java语言的特性(四)--注解--(5)-- 如何使用自定义的注解?
- Jinja2模版语言自定义filter的使用
- Lightning 组件内容多语言与自定义标签按规则使用
- 使用自定义的类CSetODBC (2)
- C#语言中变量的使用和注意事项
- 使用自定义的类CSetODBC (3)
- Scheme语言自定义语法结构时的Literal identifier
- [测试WTL程序] 在自定义浏览器中使用Ctrl+C
- 在VS.NET2003中使用Macro生成自定义异常代码
- 使用Module自定义网站定义(Site Definition)
- 如何使用Css样式自定义一个DataGrid的风格
- 使用自定义用户控件的一些经验
- Scheme语言自定义语法结构时的Literal identifier
- 使用自定义的WebControl来构建简单的WebForm
- 使用自定义的类CSetODBC(一)
- 如何使用Css样式自定义一个DataGrid的风格