【发布时间】:2016-05-02 13:00:24
【问题描述】:
我对如何传递对双指针的引用有点困惑,我什至不确定这是否正是我要寻找的。p>
基本上我遇到的问题是使用双重排序的链表。我有一个函数,它接收指向我的 songNode 的指针,以按照歌曲的评分顺序重新排列歌曲。如果评分收到零,它会通过此函数确保用户提供 1 到 5 之间的有效评分并将其重新插入到链接列表中。
我有点困惑的部分是更改传递给第一个函数的 head 的初始值,如下所示:
songNode* head = NULL;
songNode* tail = NULL;
displaySongs(head);
printf("\n\n");
reassignSongs(head, tail);
reassignSongs 函数接受一个指向这些歌曲节点的指针。在 reassignSongs 函数中,它调用一个函数,该函数接受一个指向这些头和尾变量的双指针。
addSongToList(artist, title, rating, &head, &tail);
int addSongToList(char* artist, char* title, int rating, songNode** head, songNode** tail)
这个函数操作头指针,当我回到主函数时,头变量仍然是原来的样子,因为对这个变量的引用没有改变..
我真的只是想知道这通常是如何处理的?你进入三分球吗?四重指针?获取指针的地址?
【问题讨论】:
-
您在寻找指向指针的指针吗?
reassignSongs(&head, &tail);定义为void reassignSongs (songNode **head, songNode **tail);。 -
我应该这样做吗?我唯一的问题是当我这样做时,我如何执行我的其他函数调用?我是否传递取消引用的双指针的地址?这对我来说看起来很奇怪我不确定这是否是要走的路
-
如果您希望通过函数交换指针
head和tail,那么我将使用一个函数来完成,您将指针的地址传递给该函数,使它们指向指针。 This SO question 解释了如何使用它们。 -
我并没有真正交换它们,基本上发生的事情是当我回到我的主要功能以正确顺序显示歌曲时,头部变量没有改变并显示错误信息。