C-这两条线有什么区别


struct node *tempNode = (struct node*) malloc(sizeof(struct node));
//and
struct node *tempNode = malloc(sizeof(struct node));
struct node *tempNode = (struct node*) malloc(sizeof(struct node));

您将空间动态分配给节点指针tempnode,并将其键入为struct节点*类型。(指向结构的指针)

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

与上述相同,除非没有显式打字(struct node*)

没有区别。由于malloc返回类型void *,因此可以将其分配给任何指针类型的变量,而无需铸造。正如约翰·博德(John Bode)提到的那样,施放 malloc的结果被认为是不良练习,因为它可能掩盖了编译器错误,这可能会导致malloc的其他定义。

由于您正确地施放它,因此两者之间没有区别。

,但通常会在C中皱眉,因为void*可以隐式转换为任何其他(数据)指针类型。

还请参阅此C FAQ条目:投射Malloc的返回值有什么问题?

a 第三在那里:

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

这更好,因为它会改变类型的更改。

在调用malloc的情况下,分配了内存,该内存具有字节中struct node的大小。它将void*返回到分配的内存。

现在是:您的两条线都完全相同,但是第二行使用C 编译器编译时会导致警告。

c允许将void*的隐式转换为其他指针类型,而C 编译器至少会警告您或给您错误。

相关内容

  • 没有找到相关文章

最新更新