c - 传递对双指针的引用 - 混淆

标签 c pointers

我对如何将引用传递给双指针有点困惑,我什至不确定这是否正是我要寻找的。

基本上,我遇到的问题是使用双向排序的链表。我有一个函数,它接收指向我的 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)

这个函数操作 head 指针,当我回到 main 函数时,head 变量仍然是原来的样子,因为对这个变量的引用没有改变..

我真的只想知道这通常是如何处理的?你会研究三重指针吗?四重指针?获取指针的地址?

最佳答案

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

void reassignSongs(songNode **head, songNode **tail) 你的调用看起来像:

reassignSongs(&head, &tail);

使用它的原因是更改存储在headtail 中的地址。要在调用函数中引用 head 指向的 songNode 必须使用 (*head)(*tail) 来引用指向指向节点的指针,以便您可以在函数内编辑列表的 headtail

关于c - 传递对双指针的引用 - 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35005807/

相关文章:

c - 为什么 C 数组在传递大小时衰减为指针

c - 使 makefile 可执行

c - PugiXML 值输出编码

c++ - 为什么不能在 C++ 中创建一个包含一个元组和一个 unique_ptr 作为值的元组?

c - 我的代码有什么问题?该程序只是终止而没有错误声明

C FILE指针,为什么不直接使用FILE类型呢?

c - 关于 pthread_create() 和 pthread_join()

c - C 中枚举类型的溢出?

C - 两个数组之间的 AND 运算符

c++ - 比较指向不同数组的指针是否相等是未指定的行为吗?