文档介绍:首先看一下参数用单指针时的情况:
#include<>
#include<>
typedefstruct_3d
{
int x,y,z;
}_3d;
inta(GSList *list)
{
if(g_slist_length(list) !=0 && g_slist_length(list) != 4 )
{
list = g_slist_insert_before(list,list,"zhu1");
return;
}
list = g_slist_append(list,"zhu");
a(list);
printf("OK\n");
}
intmain(int argc, char* argv)
{
GSList *list = NULL;
a(list);
GSList *iter1 = list;
while(iter1 != NULL)
{
printf("%s\n",((char *)(iter1->data)));
iter1 = iter1->next;
}
return 0;
}
//gcc -g -o test `pkg-config --cflags --libs glib-`
程序的执行流程是这样的:(数字代表行号)
22:定义一个链表 list,它指向空
16:往 list 中添加一个数据,此时 list 的地址变为非空
17:进入递归
13:往 list 中添加一个数据,此时 list 的地址仍然非空
19:此时 list 的地址仍然非空
24:list 变为空指针,即函数 a 中的参数 list 没有传递下来。
所以程序输出为空。
改正方法是使用双指针代替单指针。
#include<>
#include<>
typedefstruct_3d
{
int x,y,z;
}_3d;
inta(GSList **list)
{
if(g_slist_length(*list) !=0 && g_slist_length(*list) != 4 )
{
*list = g