我正在传递一个指向函数的双指针。该函数将数据从文件读取到链表中。我将 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);
定义为 (ListNodeType *),并在函数 ReadFile 中传递 &CircuitData