我通常用python编程。为了提高我的模拟性能,我正在学习 C。在将附加函数实现到链表时,我很难理解指针的指针的使用。这是我的书 (Understanding Pointers in C by Kanetkar) 中代码的摘录。
#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 初学者),要么太简单。我很感谢任何提示、评论或链接,我可以在这里阅读。