这两条线有什么区别?

时间:2016-11-22 18:49:34

标签: c struct malloc sizeof dynamic-memory-allocation

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

//and

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

4 个答案:

答案 0 :(得分:0)

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

您正在动态地将空间分配给节点指针tempNode并将其类型转换为结构节点*类型。 (指向结构的指针)

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

与上面相同,除了没有显式的类型转换(struct node *)

答案 1 :(得分:0)

没有区别。由于malloc返回类型void *,因此可以将其分配给任何指针类型的变量而不进行强制转换。正如John Bode所提到的,转换malloc的结果被认为是不好的做法,因为它可能会掩盖由于malloc的其他定义而导致的编译器错误。

答案 2 :(得分:0)

由于你正确地投射它,两者之间没有区别。

但是由于void*可以隐式转换为任何其他(数据)指针类型,因此演员在C中通常不赞成。

另请参阅此C FAQ条目:What's wrong with casting malloc's return value?

一个第三个​​

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

哪个更好,因为如果更改类型,它会减少更改。

答案 3 :(得分:-1)

通过调用malloc,分配的内存大小为struct node,以字节为单位。它将void*返回到已分配的内存。

现在的问题是:你的两行完全相同,但是第二行在用C ++编译器编译时会引发警告。

C允许将void*隐式转换为不同的指针类型,而C ++编译器将 - 至少 - 警告您,或者给您一个错误。