链接列表,在列表的头部作为函数中的参数传递时不起作用

时间:2016-02-15 20:53:57

标签: c list pointers linked-list singly-linked-list

将函数列表的头部作为参数传递时会出现什么问题?

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
    int value;
    struct node* next;

}node;
node* h1 = NULL;

void ubaci(int x, node *head)
{
    node *novi = (node*)malloc(sizeof(node));
    novi->value = x;
    novi->next = head;
    head = novi;
}

void ispisi(node *head)
{
    node *temp = head;

    while(temp != NULL)
    {
        printf("%d -> ",temp->value);
        temp = temp->next;
    }
}

int main()
{
    int x = 0;

    while(x<10)
    {
        x++;
        ubaci(x,h1);
    }
    ispisi(h1);

    return 0;
}

这不会起作用,我无法弄清楚原因。但是当我尝试使用这些函数而不将列表的头部作为参数传递并使用全局变量时,它可以完美地工作。 例如:

void ubaci(int x)
{
    node *novi = (node*)malloc(sizeof(node));
    novi->value = x;
    novi->next = h1;
    h1 = novi;
}

void ispisi()
{
    node *temp = h1;

    while(temp != NULL)
    {
        printf("%d -> ",temp->value);
        temp = temp->next;
    }
}

1 个答案:

答案 0 :(得分:0)

函数参数是其局部变量。局部变量的任何更改都不会影响原始参数。

如果要在函数中更改参数,则应通过引用传递参数。

例如

void ubaci(int x, node **head)
{
    node *novi = (node*)malloc(sizeof(node));
    novi->value = x;
    novi->next = *head;
    *head = novi;
}

函数调用可能看起来像

ubaci( x, &h1 );