如果它过于基本或愚蠢,请耐心等待,但我想知道,当我们有一个节点结构时: -
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
?
答案 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”中的数据。节点,而不是将节点放在函数堆栈上。