创建链表时,我们不需要创建实际节点吗?

问题描述:

我从this article.创建链表时,我们不需要创建实际节点吗?

学习链表教程的作者从来没有产生实际的节点,但类型的节点只指针变量,你可以用下面的代码看...

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.

那么,如何笔者逃脱了没有创造日e节点?他只是简单的创建指针变量,然后简单地取消引用它们....

+1

'结构节点*节点= malloc的(的sizeof(*节点))'肯定 '创建' 它。 – user3125367 2014-09-22 03:10:20

+0

关于指针(而不仅仅是节点)的要点是,如果您的头节点固定在堆栈上,则不能安全地添加新元素。 – user3125367 2014-09-22 03:12:56

+0

那么,你试着拿出malloc的,看看你有多远。那些是节点。你应该查看malloc的功能。 – Matt 2014-09-22 03:15:17

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

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

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

指针被创建,这样他们可以参考address.Since正常结构变量不能存储的地址结构,这句法是错的。 struct node head; struct node second; struct node third;