0

我将一个双指针传递给一个函数。该函数将文件中的数据读取到链表中。我将 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; 
4

4 回答 4

2

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

ListNodeType* CircuitData;

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

*CircuitData = newPtr;

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

您还需要通过调用正确地将 CircuitData 指针的地址传递给 ReadFile 函数

ReadFile(&CircuitData, ...)
于 2013-10-17T20:51:15.470 回答
1

请记住,值是通过 C 中的副本传递的。因此,内部的这个赋值ReadFile

CircuitData = &newPtr;

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

*CircuitData = newPtr;

为此,CircuitData必须指向一个有效的内存位置,不要将其初始化为NULL. 您可能想要这样做:

ListNodeType *CircuitData;

然后像这样调用函数:

ReadFile(ListNodeType &CircuitData, ...)
于 2013-10-17T20:51:43.457 回答
0

调用代码需要是这样的:

ListNodeType *CircuitData = NULL;

ReadFile(&CircuitData, &numEl, &numNodes);
于 2013-10-17T20:51:52.910 回答
0

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

于 2013-10-17T20:52:29.833 回答