项目中有个函数使用到了自定义的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掉。