我通常使用python編程。爲了提高我的模擬性能,我正在學習C語言。在將鏈接列表的附加函數實現時,我理解使用指針指針的問題。這是我書中的代碼摘錄(Kanetkar在C中的理解指針)。鏈接列表中指針的指針附加
#include <stdlib.h>
#include <stdio.h>
struct node{
int data;
struct node *link;
};
int main(){
struct node *p; //pointer to node structure
p = NULL; //linked list is empty
append(&p,1);
return 0;
}
append(struct node **q, int num){
struct node *temp, *r; //two pointers to struct node
temp = *q;
if(*q == NULL){
temp = malloc(sizeof(struct node));
temp -> data = num;
temp -> link = NULL;
*q = temp;
}
else{
temp = *q;
while(temp -> link != NULL)
temp = temp -> link;
r = malloc(sizeof(struct node));
r -> data = num;
r -> link = NULL;
temp -> link = r;
}
}
在這段代碼中,我將雙指針** q傳遞給append函數。我知道這是地址的地址,即在這種情況下是NULL的地址。
我只是沒有得到爲什麼這樣做是這樣的。從append()函數中的所有內容中移除一個*運算符並將簡單的NULL(即p而不是& p)傳遞給append()函數是否無效?
我已經使用了這個問題。答案要麼太難理解(因爲我只是一個C初學者)或太簡單。我很感激任何提示,評論或鏈接,我可以閱讀這些內容。
ahhhh!這真的很有幫助。謝謝! :-) – seb 2013-03-06 10:27:47