[英]What is the difference between explicit and implicit typecast in these two lines of code?
[英]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.