【问题标题】:C - Pointer memory allocation [duplicate]C - 指针内存分配
【发布时间】:2016-02-21 06:48:29
【问题描述】:

谁能解释一下两者的区别

int *x = malloc(sizeof(int));

&&

int *x = (int*)malloc(sizeof(int));

谢谢!

【问题讨论】:

  • malloc 返回一个空指针。当您将其分配给 int 指针时,键入 cast 总是好的。它不会对代码产生任何影响,但您会避免一个警告。
  • @Swanand,如果您不输入 caste 并返回 malloc(),您将不会收到任何警告。
  • 它的编译器依赖。例如,如果您在C++ 编译器中编写C 程序,那么您需要强制转换。
  • @Swanand malloc 的返回是void*,这意味着在C 中不需要cast malloc,但如果你需要这样做可能是因为你正在使用a wrong Compiler 或者wrong Language。现在,您能否解释一下为什么类型转换总是好的。?相信我,这样做在某些时候会有很大的不同。请解释一下。
  • @Haris & @ Milchi 是的……你们俩都是对的。我的编译器是错误的。我尝试使用 GCC,但没有任何警告。我正在使用基于 Eclipse 的编译器,其中包含许多安全插件(MISRA、Lint 等),这就是我收到警告的原因。

标签: c pointers memory malloc allocation


【解决方案1】:

不同之处在于您在第二个示例中转换了malloc() 的返回值。 malloc() 返回一个 void* 指针,在这种情况下,它会自动安全地提升为任何其他指针类型。

因此,在这种情况下不需要并且不应该进行强制转换。检查here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-29
    • 2018-08-11
    • 2021-06-22
    • 2015-04-21
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多