C中的Malloc语法



在书中,我读到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;

谢谢

代码动态地将pointer创建为单一类型的struct node。在大多数版本的C中,不需要(struct node *)强制转换,有些人认为不应该使用它。如果您移除强制转换,它将是一个void*,它可以用于任何类型。

因此:

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

大致相当于:

newnode = malloc(sizeof(struct node));

参见:具体来说,强制转换malloc的结果有什么危险?

注1:如果你使用Visual Studio编写C代码,如果你不强制转换malloc的结果,它会给你红色下划线。但是,代码仍然可以编译。

注意2:在c++代码中使用malloc需要您像示例中所示的那样强制转换结果

您遇到了一个非常糟糕的代码。C程序员从不强制转换malloc()的结果。这不仅是不必要的,而且可能是有害的。

您应该将希望malloc分配的字节数作为参数传递。这就是为什么在这个代码示例中使用sizeof(struct node)告诉C为struct节点变量分配所需的字节数。顺便说一下,像这段代码中所示的那样强制转换结果是一个坏主意。

malloc返回一个void指针。

(struct node*)执行从void指针到目标指针类型的显式转换

"malloc"返回一个空指针。(struct node *)是将malloc的结果类型转换为"节点结构指针",这(毫无疑问)就是"newnode"。

相关内容

  • 没有找到相关文章

最新更新