更改我在C中的函数内传递的指针

更改我在C中的函数内传递的指针,c,function,pointers,C,Function,Pointers,我有这段代码,它将(希望)成为一个单链表实现 #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

我有这段代码,它将(希望)成为一个单链表实现

#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;
   }
}
它很好用。我的问题是,;为什么我必须创建临时文件?据我所知,在代码的第一个版本中,我传递了一个指向root的指针,这样就不会出现“按引用传递”的问题,而且在运行时也不会出现问题。。。怎么了

(*root)->d = n;
(*root)->next = NULL;
这是一个运算符优先级问题。使用
()
将修复它

这是一个运算符优先级问题。使用
()
将修复它。

运算符优先级

*root->d = n;
被解析为

*(root->d) = n;
但是你想要

(*root)->d = n;
运算符优先级

*root->d = n;
被解析为

*(root->d) = n;
但是你想要

(*root)->d = n;
请参阅。
->
运算符的优先级高于
*
(取消引用)运算符,这是导致错误的原因

*由于运算符的优先级,root->d被解释为*(root->d)而不是(*root)->d。

请参阅。
->
运算符的优先级高于
*
(取消引用)运算符,这是导致错误的原因

*root->d = n;

*由于运算符的优先级,root->d被解释为*(root->d)而不是(*root)->d。

谢谢,这就是问题所在!谢谢你,就是这样!
*root->d = n;