传递对双指针的引用 - 混乱

时间:2016-01-26 01:53:32

标签: c pointers

我对如何传递双指针的引用感到有点困惑,我甚至不确定这是否是我正在寻找的。

基本上我遇到的问题是使用双重排序的链表。我有一个函数,它接收一个指向我的songNode的指针,按照它们的评级顺序重新排列歌曲。如果评级收到零,则会通过此功能确保用户提供1到5之间的有效评级,并将其重新插入链接列表。

我有点困惑的部分是改变传递给第一个函数的头部的初始值,如下所示:

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)

这个函数操纵头指针,当我回到主函数时,head变量仍然是这样,因为对这个变量的引用没有改变..

我真的只是想知道这通常是如何处理的?你进入三重指针吗?四指针?拿指针的地址?

1 个答案:

答案 0 :(得分:1)

reassignSongs函数的定义应如下所示:

void reassignSongs(songNode **head, songNode **tail),您的电话会是:

reassignSongs(&head, &tail);

使用此选项的原因是更改headtail中存储的地址。要引用调用函数中head指向的songNode,必须使用(*head)(*tail)来引用指向节点的指针,以便编辑{{1}函数中列表的{}或head