首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这两行之间的区别是什么?

这两行之间的区别是什么?
EN

Stack Overflow用户
提问于 2016-11-23 02:49:34
回答 4查看 93关注 0票数 0
代码语言:javascript
运行
复制
struct node *tempNode = (struct node*) malloc(sizeof(struct node));

//and

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

回答 4

Stack Overflow用户

发布于 2016-11-23 02:53:53

代码语言:javascript
运行
复制
struct node *tempNode = (struct node*) malloc(sizeof(struct node));

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

代码语言:javascript
运行
复制
struct node *tempNode = malloc(sizeof(struct node));

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

票数 0
EN

Stack Overflow用户

发布于 2016-11-23 02:56:19

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

票数 0
EN

Stack Overflow用户

发布于 2016-11-23 02:56:19

既然你的造型是正确的,那么两者之间就没有区别。

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

另请参阅以下C常见问题条目:What's wrong with casting malloc's return value?

第三个在那里:

代码语言:javascript
运行
复制
struct node *tempNode = malloc(sizeof *tempNode);

这是更好的,因为它使得在类型改变的情况下改变较少。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40749479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档