两个malloc定义结构之间的区别

Kyr*_*rol 0 c compiler-construction malloc casting

我想知道这之间是否存在真正的区别:

c = (struct_t *) malloc(sizeof(struct_t));
Run Code Online (Sandbox Code Playgroud)

还有这个

c = malloc(sizeof(struct_t *));
Run Code Online (Sandbox Code Playgroud)

除了避免演员之外,编译器在第二种形式方面是否优先于第一种?或者这两种方式完全相同,只是一个"美学"问题?

Dan*_*her 6

第一个分配sizeof(struct_t)字节,第二sizeof(struct_t*)个字节.

除此之外malloc,无论你是否投出结果,都没有区别.转换结果使得代码可以接受C++编译器,但它可以隐藏不包含的错误stdlib.h,因此广泛倾向于不将结果转换为C语言.

  • 好吧,你必须使用正确的尺寸.然后,如果你有这个,我更喜欢没有强制转换的版本,因为强制转换是不必要的(如果不严格编译为禁止隐式声明的标准,则可以隐藏错误).C++人通常更喜欢带演员的人. (2认同)
  • C++人员应该使用`new`,用C编译器编译C代码,并将其链接到他们的C++项目...... (2认同)

NPE*_*NPE 5

两者完全不同.第一个分配结构的实例,而第二个分配指向结构的指针.

通常,它们甚至不会分配相同数量的字节.