在书中我读到malloc的语法是malloc(sizeof(int))但是在双链表程序之一中我看到以下内容:
newnode=(struct node *)malloc(sizeof(struct node))
什么是(struct node *)在这做什么?整个代码在做什么?顺便说一下,程序中结构的代码如下 .
struct node
{
char line[80];
struct node *next,*prev;
};
struct node *start=NULL,*temp,*temp1,*temp2,*newnode;
谢谢
5 回答
代码动态创建
pointer
到单一类型的struct node
. 在C的大多数版本中,不需要(struct node *)
强制转换,有些人认为不应该使用它 . 如果删除了强制转换,它将是void*
,可用于任何类型 .因此:
大致相当于:
见:Specifically, what's dangerous about casting the result of malloc?
注意1:如果您使用Visual Studio编写C代码,如果不转换
malloc
的结果,它将为您提供红色下划线 . 但是,代码仍将编译 .注意2:在C代码中使用
malloc
要求您转换结果,如示例所示 .你遇到了一个非常糟糕的代码 . C程序员从不投射
malloc()
的结果 . 不仅不需要它,而且can be harmful .您应该传递希望
malloc
作为参数分配的字节数 . 这就是为什么在这个代码示例中使用sizeof(struct node)
告诉C
来分配struct节点变量所需的字节数 . 顺便说一下,在这段代码中显示的结果就是坏主意 .malloc返回一个void指针 .
(struct node *)执行从void指针到目标指针类型的显式转换
“malloc”返回一个void-pointer . (struct node *)将malloc的结果类型转换为“节点结构指针”,这无疑是“newnode” .