将双指针传递给函数以获取链表 (C) 的起始地址



我正在传递一个指向函数的双指针。该函数将数据从文件读取到链表中。我将 CircuitData 设置为指向第一个节点的指针。在我调用函数并想要使用 CircuitData 之后,它是空的。为什么它不返回第一个节点(&newPtr)的地址?

ListNodeType **CircuitData;
int numEl = 0;
int numNodes = 0;
CircuitData = NULL;
ReadFile(CircuitData, &numEl, &numNodes);
printf("%p", CircuitData);

我正在调用的 ReadFile 函数的一部分:

void ReadFile(ListNodeType **CircuitData, int *numEl, int *numNodes){
    *numEl = 0;
    *numNodes = 0;
    ListNodeType *newPtr, *tempPtr;
    newPtr = malloc(sizeof(ListNodeType));
    CircuitData = &newPtr;
    newPtr->nextPtr = NULL; 

首先,声明的CircuitData类型应该是一个指针:

ListNodeType* CircuitData;

要设置存储在CircuitData(在 ReadFile 函数内)中的地址,您需要编写

*CircuitData = newPtr;

这会将地址CircuitData处的数据设置为存储在 newPtr 中的地址,这是您要执行的操作。

您还需要通过调用

ReadFile(&CircuitData, ...)

请记住,值是通过 C 中的复制传递的。因此,内部的这个分配ReadFile

CircuitData = &newPtr;

不会传播到调用方。我认为你想要这个:

*CircuitData = newPtr;

为此,CircuitData必须指向有效的内存位置,不要将其初始化为 NULL 。您可能希望改为执行以下操作:

ListNodeType *CircuitData;

然后像这样调用函数:

ReadFile(ListNodeType &CircuitData, ...)

调用代码需要如下所示:

ListNodeType *CircuitData = NULL;
ReadFile(&CircuitData, &numEl, &numNodes);
将 CircuitData

定义为 (ListNodeType *),并在函数 ReadFile 中传递 &CircuitData

相关内容

  • 没有找到相关文章

最新更新