【问题标题】:Passing references to double pointers - Confusion传递对双指针的引用 - 混淆
【发布时间】: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);
  • 我应该这样做吗?我唯一的问题是当我这样做时,我如何执行我的其他函数调用?我是否传递取消引用的双指针的地址?这对我来说看起来很奇怪我不确定这是否是要走的路
  • 如果您希望通过函数交换指针 headtail,那么我将使用一个函数来完成,您将指针的地址传递给该函数,使它们指向指针。 This SO question 解释了如何使用它们。
  • 我并没有真正交换它们,基本上发生的事情是当我回到我的主要功能以正确顺序显示歌曲时,头部变量没有改变并显示错误信息。

标签: c pointers


【解决方案1】:

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

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

reassignSongs(&head, &tail);

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

【讨论】:

  • 所以当我在 reassignSongs 函数中时,我调用了另一个函数,它也接受了一个 songNode**。那么当将这些参数传递给那个函数时,我必须传入 &*head 吗?
  • @Kyle Jensen 抱歉,我回复晚了,但是是的,只要您想更改指针的实际值,您就会这样做,但是,如果您尝试更改值 存储在struct中,那么你不需要使用songNode **的函数,而只需要songNode *
  • @Kyle Jensen 如果您确实希望函数接收songNode ** 并且head 的类型已经是songNode **,那么您可以在函数调用中简单地传递head .注意:&*head 表示引用 head 指向的内容,然后 & 表示引用 this 的内存地址,因此 &*headhead 具有相同的含义,所以在某种意义上你是对的在什么必须通过。
猜你喜欢
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 1970-01-01
相关资源
最近更新 更多