struct node *tempNode = (struct node*) malloc(sizeof(struct node));
//and
struct node *tempNode = malloc(sizeof(struct node));
答案 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 ++编译器将 - 至少 - 警告您,或者给您一个错误。