1 / 2
文档名称:

双指针的使用.doc

格式:doc   大小:38KB   页数:2页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

双指针的使用.doc

上传人:xunlai783 2018/5/12 文件大小:38 KB

下载得到文件列表

双指针的使用.doc

相关文档

文档介绍

文档介绍:这两天在写 K 近邻查询的程序,其中一个范围查询的子函数用到了递归,它有一个参数是GSList * 型的的指针 list,在参数传递过程中 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_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_leng