首页 文章

C中的Malloc语法

提问于
浏览
3

在书中我读到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 回答

  • 5

    代码动态创建 pointer 到单一类型的 struct node . 在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 要求您转换结果,如示例所示 .

  • 3

    你遇到了一个非常糟糕的代码 . C程序员从不投射 malloc() 的结果 . 不仅不需要它,而且can be harmful .

  • 2

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

  • 1

    malloc返回一个void指针 .

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

  • 2

    “malloc”返回一个void-pointer . (struct node *)将malloc的结果类型转换为“节点结构指针”,这无疑是“newnode” .

相关问题