关于指向指针的指针的问题!

hzfxjun 2003-09-28 10:44:21
我在书上看到
void lq_ins2(NODE **head,int x)
{
......下面为函数内容,略
}
因为本函数有可能要更改链表的首指针,所以函数中关于链表头指针的参数应为链表头指针的指针。

这是为什么,为什么一定要是指向指针的指针?
像void lq_ins2(NODE *head,int x)这样用指针,不行吗?
...全文
44 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZouMorn 2003-09-30
  • 打赏
  • 举报
回复
楼主兄弟:
假设你有一个链表,头指针是h; (NODE* h;)

调用
void lq_ins2(NODE* head, int x)

lq_ins2(h, t);
函数给链表头添加一个节点,你原来的 h 还能用吗,h 现在是指向第二个节点了?

如果用下面的函数
void lq_ins2(NODE** pHead, int x)
{
//函数内部使用 h 后,并且改变 h 的值
NODE* h = new NODE;//
h->Next = *pHead;
*pHead = h;
}
调用后,h仍然是头指针,该方法可以用cpp中的引用实现。

你懂不懂我在说什么?



duxianghe 2003-09-29
  • 打赏
  • 举报
回复
如果要改变内容:
调用时用:lq_ins2(NODE &head,int x) //此时head为指针
gujianliang 2003-09-29
  • 打赏
  • 举报
回复
如果是指针变量就可以改变。但如果是指针常量呢?(我上面的离子就是要说明如果是数组的情况,那就得用指针的指针了。)
hzfxjun 2003-09-29
  • 打赏
  • 举报
回复
但是用void lq_ins2(NODE *head,int x)
也能改头指针的地址呀!
ZouMorn 2003-09-29
  • 打赏
  • 举报
回复
这个的意思主要是

将头指针传入,并且可能被该函数修改,例如在头上添加一个节点什么的。

如果是 c 语言,只有这样,但是如果是 c++ 还可以:

F(NODE*& p, )

这样调用:

NODE* h;
F(h, );

caiyi0903 2003-09-29
  • 打赏
  • 举报
回复
楼主还是没能理解函数的指针调用这个概念!!
gujianliang 2003-09-29
  • 打赏
  • 举报
回复
接上贴

如果就一个指针,那就只有数组了,虽然数组名也是地址,但它是地址常量,不能变的。
所以只有靠&argv(65486可以被重新赋值)了。
gujianliang 2003-09-29
  • 打赏
  • 举报
回复
一般NODE是在前用define过的,通常有操作数组的,
这让我想起main(int argc,char **argv),其中就是:

&argv: argv:
65486 ------->argv[0],argv[1],argv[2],argv[3],null
(地址)

argv 本身就是数组名,就是指针,那它的地址就是&argv了,操作就灵活了,是不是这样?



duxianghe 2003-09-28
  • 打赏
  • 举报
回复
如果调用时用:lq_ins2(NODE head,int x) //此时head为指针
那么:
lq_ins2(NODE *head,int x)
{……………
}
如果调用时用:lq_ins2(NODE *head,int x) //此时head也为指针,*head就不用说了
那么:
lq_ins2(NODE **head,int x)
{……………
}

wythust 2003-09-28
  • 打赏
  • 举报
回复
我想是不是可以这样理解:
(1),如果用*head做函数参数,执行时假设实参为*H,由于*H与*head指向同一内存单元,改变*head的值(即改变这一内存单元的值)时,也就改变了*H的值,但如果要让*head指向另一内存单元,*H的值就不能跟着变了(即不能正确返回头指针)
(2),如果用二级指针就不一样了,**head就是*(*head),*head是**head指向的内容,由(1)可知,改变*(*head)指向的内容,即改变*head,是可以返回给实参的。

2,959

社区成员

发帖
与我相关
我的任务
社区描述
就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
c1认证c4javac4前端 技术论坛(原bbs)
社区管理员
  • 软件水平考试社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧