繁体   English   中英

这两行有什么区别?

[英]What is the difference between these two lines?

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 node *类型。 (结构指针)

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

除没有显式类型转换(结构节点*)外,其他与上述相同

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

由于您正确投射了两者,因此两者之间没有区别。

但是强制转换通常在C语言中不受欢迎,因为void*可以隐式转换为任何其他(数据)指针类型。

另请参见此C FAQ条目: 强制转换malloc的返回值怎么了?

第三个:

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

这样做更好,因为在更改类型的情况下,它所做的更改较少。

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

现在的事情是:这两行的功能完全相同,但是第二行将在使用C ++编译器进行编译时引发警告。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM