我有这段代码(希望)成为一个单链表实现。
#include <stdio.h>
#include <stdlib.h>
struct NODE{
int d;
struct NODE *next;
};
int addNode(int n, struct NODE **root);
int main(){
struct NODE *root = NULL;
addNode(3, &root);
printf("%i\n", root->d);
getch();
return 0;
}
int addNode(int n, struct NODE **root){
if(*root == NULL){
*root = malloc(sizeof(struct NODE));
*root->d = n;
*root->next = NULL;
return 0;
}
}
当我运行它时,我在 addNode 函数中收到“对非结构或联合的成员 'd' 的请求”;与“下一个”部分相同。相反,如果我将功能更改为:
int addNode(int n, struct NODE **root){
struct NODE *temp;
if(*root == NULL){
*root = malloc(sizeof(struct NODE));
temp = *root;
temp->d = n;
temp->next = NULL;
return 0;
}
}
它工作得很好。我的问题是;为什么我必须创建临时?据我了解,在代码的第一个版本中,我传递了一个指向根的指针,因此不应该存在“通过引用传递”的问题,并且它不应该有运行问题......错误是什么?