2013-10-17 17 views
0

我正在向函數傳遞一個雙指針。該函數從文件讀取數據到鏈表中。我將CircuitData設置爲指向第一個節點的指針。在我調用函數並想要使用CircuitData之後,它是空的。爲什麼它不返回第一個節點的地址(& newPtr)?那我打電話ReadFile函數的傳遞函數的雙指針獲取鏈表(C)的起始地址

ListNodeType **CircuitData; 
int numEl = 0; 
int numNodes = 0; 
CircuitData = NULL; 

ReadFile(CircuitData, &numEl, &numNodes); 
printf("%p", CircuitData); 

部分:

void ReadFile(ListNodeType **CircuitData, int *numEl, int *numNodes){ 
    *numEl = 0; 
    *numNodes = 0; 

    ListNodeType *newPtr, *tempPtr; 
    newPtr = malloc(sizeof(ListNodeType)); 
    CircuitData = &newPtr; 
    newPtr->nextPtr = NULL; 
+3

您聲明的項目應該是'L istNodeType * CircuitData;',調用應該是'ReadFile(&CircuitData,...)',並且函數中的賦值應該是'* CircuitData = newPtr;'。 – lurker

回答

2

首先,CircuitData聲明的類型應該是一個指針:

ListNodeType* CircuitData; 

設置存儲在地址CircuitData(裏面的ReadFile功能)你會寫

*CircuitData = newPtr; 

這將地址CircuitData中的數據設置爲newPtr中存儲的地址,這正是您想要執行的操作。

您還需要通過調用

ReadFile(&CircuitData, ...) 
1

正確傳遞CircuitData指針ReadFile函數的地址,請記住,值由副本C.通過這樣,這裏面分配ReadFile

CircuitData = &newPtr;

不會傳播給調用者。我認爲,你想要這個:

*CircuitData = newPtr; 

對於這項工作,必須CircuitData指向一個有效的存儲位置,不要將其初始化爲NULL。你可能會想這樣做,而不是:

ListNodeType *CircuitData; 

然後調用這樣的功能:

ReadFile(ListNodeType &CircuitData, ...) 
0

調用代碼必須是這樣的:

ListNodeType *CircuitData = NULL; 

ReadFile(&CircuitData, &numEl, &numNodes); 
0

定義CircuitData爲( ListNodeType *)和函數ReadFile中,通過& CircuitData