在代码中,我们可以看到在*new_node
中分配了一个指针。而在C
中,*new_node
表示new_node
的内容。那么,它的原因是什么;为什么它没有造成任何问题?
Node *create_node(int item, Node *next)
{
Node *new_node = (Node *)malloc(sizeof(Node)); //isn't it receiving the pointer as content of(*new_node) new_node?
if (new_node == NULL) {
printf("Error! Could not crate a new Noden");
exit(1);
}
new_node->data = item;
new_node->next = next;
}
在表达式中,*new_node
表示"new_node
指向的对象"。但是,Node *new_node = (Node *)malloc(sizeof(Node));
是一个声明,而不是表达式语句,其中的文本*new_node
也不是表达式。
声明的第一部分Node *new_node
表示"new_node
是指向Node
的指针。"声明的第二部分= (Node *)malloc(sizeof(Node))
,表示"将new_node
初始化为(Node *)malloc(sizeof(Node))
。此处的=
不是赋值,也不是赋值表达式。它是声明中用于指定所定义对象的初始值的语法。所定义的对象是new_node
,而不是*new_node
。
声明和赋值之间的语法不同,您必须习惯它。Node *new_node = foo;
将new_node
初始化为foo
,但*new_node = foo;
将*new_node
设置为foo
。
Node *new_node = (Node *)malloc(sizeof(Node));
这将为Node结构的新元素分配新的动态内存。并且所分配的存储器的基址存储在new_node中。
现在,new_node指向一个新内存,但该内存为空/垃圾。它不包含任何有关节点的有用信息。因此,我们需要在结构中填充必要的信息,使其有用。
`new_node->data = item;`
new_node->next = next;
这些行将数据复制到新节点的分配内存中,并将新节点与其他节点链接。
注意:您的代码片段没有return语句。