c - C 中的 Malloc 语法

标签 c list struct linked-list 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;

谢谢

最佳答案

代码正在动态创建一个指向单一类型结构节点指针。在大多数 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/

相关文章:

c - 最大 vector 值函数问题

python - 通过从旧列表复制来创建新列表

swift - 可失败初始化程序无法满足不可失败初始化程序要求

c++ - Declspec A Struct,当创建缓冲区以发送到 OpenCL 内核时

c++ - 指向包含指向 vector 指针的结构的 vector

c - 从 C 字符串中去除第一个和最后一个字符

c - 格式“%s”需要类型为“char *”的参数

java - for 循环是否在每次迭代中重新评估其主体中的函数?

python - 通过类属性访问的字典列表

r - 不同索引的子集列表