马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
上一个提问:https://fishc.com.cn/thread-237095-1-1.html
上一个内容:
来自《带你学C带你飞》S1E45:单链表1
小甲鱼犯了什么错误了?
我认为的最佳回答:
柿子饼同学 的回答:
你先执行 free 了 , 相当于这本书已经不存在了 , 怎么再找到被删除的这本书的后继呢
应该是用一个临时指针 temp 指向现在的这本书
然后 library = library->next
然后 free(temp)
酱紫先跳到这本书的下一本 , 然后把这一本删除才对
感谢柿子饼同学回复,小甲鱼在下一节课的开头也说了这个问题,但是他把Library换成了指针的指针传进来,为什么一定要传Library的地址进来呢,不能还是传值吗?
这是小甲鱼的修改代码
这是我的修改代码void releaseLibrary(struct Book *headLibrary)
{
struct Book *temp;
while(headLibrary != NULL)
{
temp = headLibrary;
headLibrary = headLibrary->next;
free(temp);
}
}
传递指针的指针是为了能够修改指针本身的值,从而达到在函数内部修改指针的目的。如果只传递指针的值,函数内部对指针的修改不会影响到外部的指针。
在这个问题中,小甲鱼传递指针的指针是为了能够在函数内部将头指针(headLibrary)置为NULL,以表示链表已经被释放。这样做的好处是,当函数返回后,调用者可以通过检查头指针是否为NULL来确定链表是否已经被释放。而如果只传递指针的值,函数内部对指针的修改并不能影响到调用者。
你的修改代码中,传递指针的值也是可以实现释放链表的功能的。但是需要注意,在函数内部释放指针时,不能直接将指针置为NULL,因为这样做只会修改函数内的指针副本。为了能够修改外部的指针值,你需要在函数返回之前,手动将外部指针置为NULL。
总结起来,传递指针的指针可以更方便地释放链表,并且在函数返回后能够及时反馈链表被释放的状态,但传递指针的值也是可以实现相同功能的,只需要在函数返回之前手动将指针置为NULL即可。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
|