c-在创建链表时,我们不需要创建实际的节点吗



我正在研究本文中的链表。

本教程的作者从不创建实际的节点,而只创建node类型的指针变量,正如您在下面的代码中看到的那样。。。

struct node* head = NULL;
struct node* second = NULL;
struct node* third = NULL;

然后他在堆里为它们分配空间。。。

head = (struct node*)malloc(sizeof(struct node)); 
second = (struct node*)malloc(sizeof(struct node));
third = (struct node*)malloc(sizeof(struct node));

为什么他从来没有创建过真正的节点?代码应该看起来像这样。。。

struct node head;
struct node second;
struct node third;

如果我的知识是正确的(如果我错了就纠正我)。简单地声明指针变量并不能创建实际的变量(链表中的节点),因此不能像本文中使用代码的教程作者那样取消引用

head->data = 1;

我的意思是,如果这有效,那么为什么不起作用呢?

int *a;
a=5;
printf("%d",*a);

显然,上面的代码没有输出5。

这意味着需要创建另一个变量,然后需要声明变量的地址存储在指针变量中,只有这样才能取消引用。。。就像下面的代码。。。

int *a;
int b=5;
a=&b;
printf("%d",*a);

这将输出5。

那么,作者是如何不创建节点的呢?他只是简单地创建指针变量,然后简单地取消引用它们。。。。

节点在堆中,这就是malloc的作用。

要使用没有链表的代码来解释,它类似于:

int *a = NULL;
a = malloc(sizeof(int));
*a = 5;
printf("%d",*a);

创建结构指针,以便它们可以引用地址。由于普通结构变量无法存储地址,因此这种语法是错误的。 struct node head; struct node second; struct node third;

相关内容

  • 没有找到相关文章

最新更新