不使用引用和全局变量实现函数参数传递

来源:互联网 发布:Sort key sql 编辑:程序博客网 时间:2024/06/02 05:40

 

linkNode * head = NULLInitList(&head);InitList(linkNode ** pHead){   *pHead = (struct Node*)malloc(sizeof(Node));}


 

在C语言中没有引用数据类型,所以,如果想通过参数形式修改外部的变量的话,只能借用指针来实现。比如我们经常用到的通过指针来实现两个数的交换代码如下:

 

int a = 10;int b = 20;int * pa = &a;int * pb = &b;void swap(int * pa,int *pb){   int tmp;   tmp  = *pa;   *pa  = * pb;   *pb  = tmp; }   

如下图:

 

 

但是通过指针进行参数传递一样也是按值传递的,这个通过上面的图就能看出来。

 

如果通过上面简单的指针传递方式来修改指针的值的话,显然不行,因为函数里面,函数外的pa,pb不可见,而且退出函数后,因为函数里面的指针变量pa,pb分配在栈中,所以退出会释放空间,

 

所以,如果我们想通过参数传递来改变外部指针的值的话,我们必须定义指向指针的指针int ** ppa,int ** ppb,这两个指针指向函数外的pa,pb指针,这样就可以通过 *ppa = value的形式修改外面的pa,pb指针的值。

 

如果这个问题没有弄清楚,经常会引起内存泄露问题,这个我会在后面的文章中继续阐述...

 

原创粉丝点击