在创建链接列表时,我们制作了一个节点结构,它由数据和下一个节点的指针组成。稍后,当我们发挥函数以将元素附加到链接列表上时,我们将创建一个临时节点来存储输入的数据。
让我们考虑以下程序 -
#include<stdio.h>
struct node
{
int data;
struct node* link;
}
struct node* root=NULL;
void main(append)
{
struct node* temp;
temp= (struct node*)malloc(sizeof(struct node))
.....
}
我的第一个问题集:
在第11行中,为什么我们需要在Malloc功能之前提及(struct node*)
?
这是什么意义?
我的第二个问题集:
如果我们正在制作一个双链接列表,该列表具有由2个指针组成的节点结构(对于下一个和上一个节点),我们还将初始化结构节点类型的指针(用于遍历列表)?
在这种情况下,有其他方法可以初始化指针吗?
重要性是在程序中制作错误,
malloc将返回void*
,当您分配给struct somthing*
时,它将自动转换。
您根本不抛出 malloc
的结果,因为它返回了 void*
。这里有一个很好的解释
更好的解决方案可能是:
struct node *temp;
temp = malloc(sizeof *temp);
为什么我们需要提及'(struct node*)'在malloc函数之前 这是什么意义?
通过在malloc
函数之前编写(struct node*)
,您将返回值键入指定类型。这里的演员是可选的,经常被皱眉。
如果我们正在制作一个双链接列表,该列表将有一个节点 结构由2个指针组成(...
进行双重链接列表时,您应该声明类似的内容:
struct node {
int data;
struct node *next;
struct node *previous;
};
您可以使用malloc
函数为节点分配空间。next
和previous
指针再次是struct node
s的指针。再次致电malloc
以分配next
元素的空间。对于第一个节点,previous
应为NULL
,对于最后一个节点,next
应为NULL
。这是一个实现。
这是因为malloc的返回类型无效*。(struct node*)是一种使用它的演员,您告诉编译器您想将Malloc返回的值视为结构节点的指针。
对于可以使用的双链接列表,
struct node
{
int data;
struct node *next,*prev;
};
int main()
{
struct node *new_node=(struct node *)malloc(sizeof(node));
}
malloc返回void指针(可以在标题上检查和验证),因此在将其分配给其他类型的变量时,必须进行类型铸造。
请求您在链接上阅读https://www.tutorialspoint.com/cprogramming/c_type_casting.htm