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

时间:2013-10-17 20:47:30

标签: c function pointers linked-list function-pointers

我正在向函数传递一个双指针。该函数将文件中的数据读入链表。我将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 个答案:

答案 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