在书中我读到 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;
谢谢
最佳答案
代码正在动态创建一个指向单一类型结构节点
的指针
。在大多数 C 版本中,不需要 (struct node *)
转换,有些人认为不应该使用它。如果您删除转换,它将是一个 void*
,可用于任何类型。
因此:
newnode = (struct node*)malloc(sizeof(struct node));
大致相当于:
newnode = malloc(sizeof(struct node));
参见:Specifically, what's dangerous about casting the result of malloc?
注意 1:如果您使用 Visual Studio 编写 C 代码,如果您不转换 malloc
的结果,它会给您加红色下划线。但是,代码仍会编译。
注意 2:在 C++ 代码中使用 malloc
需要您转换结果,如您的示例所示。
关于c - C 中的 Malloc 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15553602/