C语言 创建一个没有声明节点为指针的链表



我已经在谷歌和一些教科书上搜索了一段时间,我似乎无法理解为什么在构建链表时,节点需要是指针。

。如果我有一个节点定义为:

typedef struct Node{
    int value;
    struct Node *next;
} Node;

为什么要创建一个链表,我会说:

Node *a = malloc(sizeof(Node));
Node *b = malloc(sizeof(Node));
a->value = 1;
b->value = 2;
a->next = b;
b->next = NULL;

而不是:

Node a, b;
a.value = 1;
b.value = 2;
a.next = &b;
b.next = NULL;

根据我的理解,列表仍然可以像正常一样被引用和遍历,唯一的区别是使用点,&语法而不是箭头?

您可以用前面提到的方法创建列表。

但是你必须关心列表成员的生命周期。如果

节点a, b;

在函数的作用域中,则在该函数返回后丢失。

当你使用指针时,你通常会使用堆和实例,直到它们被删除。

您的第一个示例不起作用。你声明了两个Node指针。然而,由于您没有将它们初始化为任何东西,因此遵从它们是非法的,因为它们不指向任何东西。您必须首先使用malloc之类的东西来声明它们要指向的内存,或者将它们赋值给先前声明的局部变量。然而,你也必须记住调用free当你用内存完成。

在第二个示例中,声明两个Node变量,用于存储Node的实例。如果它们是局部变量,它们将在堆栈上分配,并且只要它们在作用域中,它们就会存在。它们具有有效的内存,因此您可以按照您所演示的方式使用它们。

相关内容

  • 没有找到相关文章

最新更新