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;

谢谢

4

5 回答 5

5

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

所以:

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

大致相当于:

newnode = malloc(sizeof(struct node));

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

注意 1:如果您使用 Visual Studio 编写 C 代码,如果您不强制转换malloc. 但是,代码仍将编译。

注意 2:malloc在 C++ 代码中使用需要您转换结果,如示例中所示。

于 2013-03-21T17:05:56.020 回答
3

你遇到了一个非常糟糕的代码。C 程序员从不强制转换malloc(). 不仅不需要,而且可能有害

于 2013-03-21T17:05:00.470 回答
2

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

于 2013-03-21T17:05:45.673 回答
2

malloc 返回一个 void 指针。

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

于 2013-03-21T17:06:01.763 回答
1

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

于 2013-03-21T17:05:27.953 回答