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

时间:2013-02-19 04:38:51

标签: 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\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;
    }
}

它运作得很好。我的问题是;为什么我要创造临时?据我了解,在代码的第一个版本中,我传递一个指向root的指针,因此不应该存在“按引用传递”的问题,并且它应该没有运行的问题......这是什么错误?

3 个答案:

答案 0 :(得分:3)

(*root)->d = n;
(*root)->next = NULL;

它是运算符优先级问题。使用()将解决此问题。

答案 1 :(得分:1)

运营商优先权。

*root->d = n;

被解析为

*(root->d) = n;

但你想要

(*root)->d = n;

答案 2 :(得分:0)

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

由于运算符优先级,

* root-&gt; d被解释为*(root-&gt; d)而不是(* root) - &gt; d。