声明链接列表节点

时间:2015-07-15 07:49:14

标签: c struct linked-list

如果它过于基本或愚蠢,请耐心等待,但我想知道,当我们有一个节点结构时: -

struct node {
 int data ;            //data
 struct node* next;    //pointer
}

为什么我们将节点声明为: -

struct node* new_node = null;

struct node* new_node= (struct node*)malloc(sizeof(struct node)); 

为什么不只是struct node new_node = null

2 个答案:

答案 0 :(得分:1)

在前两个中,您声明指向结构或节点的指针:

struct node* new_node;是指针,或结构的地址

在你的建议中,你声明了一个完整的结构或节点:

struct node new_node;这是一个将存在于堆栈中的结构。

并且您不能为结构赋予null,至少在这种情况下。

答案 1 :(得分:1)

您可以通过这种方式声明节点,但是您需要正确地初始化它。

struct node new_node = {5,NULL}; 将创建一个名为new_node的节点,数据设置为5,然后设置为NULL。

问题或多或少是你真正需要的。当您在函数中创建这样的节点时,如果您没有复制它,该节点将在函数完成后停止存在。这通常是不可取的。

但是如果你需要制作这样一个节点的副本,你可以先用malloc获取“copy”的内存,然后只需通过指向“copy”的指针填充“copy”中的数据。节点,而不是将节点放在函数堆栈上。