我正在向函数传递一个双指针。该函数将文件中的数据读入链表。我将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;
答案 0 :(得分:2)
首先,声明的CircuitData
类型应该是一个指针:
ListNodeType* CircuitData;
要设置存储在CircuitData
中的地址(在ReadFile函数内),您需要编写
*CircuitData = newPtr;
这会将地址CircuitData
的数据设置为newPtr
中存储的地址,这是您想要做的。
您还需要通过调用
将CircuitData指针的地址正确传递给ReadFile函数ReadFile(&CircuitData, ...)
答案 1 :(得分:1)
请记住,值是通过C中的副本传递的。因此,ReadFile
中的这个赋值:
CircuitData = &newPtr;
不会传播给来电者。我想你想要这个:
*CircuitData = newPtr;
为此,CircuitData
必须指向有效的内存位置,不要将其初始化为NULL
。你可能想要这样做:
ListNodeType *CircuitData;
然后调用这个函数:
ReadFile(ListNodeType &CircuitData, ...)
答案 2 :(得分:0)
调用代码必须如下:
ListNodeType *CircuitData = NULL;
ReadFile(&CircuitData, &numEl, &numNodes);
答案 3 :(得分:0)
将CircuitData定义为(ListNodeType *),并在函数ReadFile中传递& CircuitData