【问题标题】:Confusion about malloc and calloc function in C [duplicate]C中关于malloc和calloc函数的混淆[重复]
【发布时间】:2017-12-06 14:08:55
【问题描述】:

malloc函数声明:

void *malloc(size_t size);

这里,malloc 返回 void 指针。所以,void 函数什么都不返回,然后

为什么要给指针赋值malloc(函数调用)?

例如:

int *ptr;
ptr = malloc(10 * sizeof (*ptr));
^^^

malloc()的返回值是什么???

【问题讨论】:

  • voidnothing,但指向voidpointer 仍然是指针,只是未指定它指向的数据类型.

标签: c function malloc void calloc


【解决方案1】:

这对语言设计者来说可能是一个不幸的选择,但他们决定在他们的 void* 构造中重用void,这几乎颠倒了它的含义:而void 的意思是“不返回任何东西”,void*意思是“返回一个指向任何东西的指针。”

本质上,void* 是一个指向未指定对象的指针。在取消引用之前,必须将其转换为指向特定类型的指针。这正是malloccalloc 返回的那种指针。

【讨论】:

    【解决方案2】:

    void 和 void* 是不同的。 void 意味着 nohting 但 void* 可以是任何东西。 void (void*) 的指针可以转换为任何其他指针。

    为什么 malloc() 返回 void*?

    这意味着 malloc 为你分配了一个内存缓冲区,你可以用它来存储你想要的任何东西。

    【讨论】:

      【解决方案3】:

      尽量不要被空白区弄糊涂。在 C 中,您应该这样阅读声明:

      int *i; 将被读作 - 变量 *i,它给出一个 int 变量 i,它是一个指向 int 的指针。函数也是如此。类似void *fun() 的意思是fun 是一个返回指向void 的指针的函数。查看this 以获得更完整的答案。

      【讨论】:

      • 你的意思是int *fun()
      • @BasileStarynkevitch 谢谢,我的错。已更正。
      猜你喜欢
      • 2011-07-03
      • 1970-01-01
      • 2018-06-12
      • 1970-01-01
      • 1970-01-01
      • 2019-09-24
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      相关资源
      最近更新 更多