传递给函数的指针没有更新

时间:2014-10-14 18:52:16

标签: c

我是C的新人。

我编写简单的链表应用程序。

这是我的代码:

typedef struct
{
    struct node * NextNode;
    int data;
}node;

void addNode(int data, node * Head)
{
    if (Head == NULL)
    {
        Head = malloc(sizeof(node));
        Head->data = data;
        Head->NextNode = NULL;
        return;
    }
    node* CurrentNode = Head;
    node* _Newnode = malloc(sizeof(node));
    (*_Newnode).data = data;
    _Newnode->NextNode = NULL;
    while (CurrentNode->NextNode != NULL)
    {
        CurrentNode = CurrentNode->NextNode;
    }
    CurrentNode->NextNode = _Newnode; 
}

问题的上升是通过Head = NULL 在通过head= NULL后,Head没有更改并保持为空

我做错了什么? 你还可以解释一下下面发生了什么吗? 谢谢

2 个答案:

答案 0 :(得分:2)

指针按值传递 - 如果更新它,您所做的只是更新它的本地副本。如果你想更新指针,你应该传递指向它的指针,并更新它的解引用:

void addNode(int data, node ** Head)
{
    if (*Head == NULL)
    {
        *Head = malloc(sizeof(node));
        *Head->data = data;
        *Head->NextNode = NULL;
        return;
    }
    node* CurrentNode = *Head;
    node* _Newnode = malloc(sizeof(node));
    (*_Newnode).data = data;
    _Newnode->NextNode = NULL;
    while (CurrentNode->NextNode != NULL)
    {
        CurrentNode = CurrentNode->NextNode;
    }
    CurrentNode->NextNode = _Newnode; 
}

答案 1 :(得分:1)

指针node * Head按值传递,如果您要分配到Head,则需要将其作为node**Head传递,例如void addNode(int data, node ** Head) { if (*Head == NULL) { *Head = malloc(sizeof(node)); *Head->data = data; *Head->NextNode = NULL; return; } node* CurrentNode = *Head; node* _Newnode = malloc(sizeof(node)); (*_Newnode).data = data; _Newnode->NextNode = NULL; while (CurrentNode->NextNode != NULL) { CurrentNode = CurrentNode->NextNode; } CurrentNode->NextNode = _Newnode; } 。指向指针的指针。

{{1}}