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 编译器至少会警告您或给您错误。