C语言中malloc和calloc函数的混淆

C语言中malloc和calloc函数的混淆,c,function,malloc,void,calloc,C,Function,Malloc,Void,Calloc,malloc功能声明: void *malloc(size_t size); 这里,malloc返回无效指针。因此,void函数不返回任何内容,然后 为什么要将malloc(函数调用)值指定给指针? 例如: int *ptr; ptr = malloc(10 * sizeof (*ptr)); ^^^ malloc()的返回值是什么?对于语言设计者来说,这可能是一个不幸的选择,但他们决定重用void作为他们的void*构造,这几乎颠倒了它的含义:虽然void表示“不返回任何东西”,但void

malloc
功能声明:

void *malloc(size_t size);
这里,
malloc
返回无效指针。因此,
void
函数不返回任何内容,然后

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

例如:

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

malloc()
的返回值是什么?

对于语言设计者来说,这可能是一个不幸的选择,但他们决定重用
void
作为他们的
void*
构造,这几乎颠倒了它的含义:虽然
void
表示“不返回任何东西”,但
void*
表示“返回指向任何内容的指针。”


本质上,
void*
是指向未指定对象的指针。在取消引用之前,必须将其转换为指向特定类型的指针。这正是由
malloc
calloc
返回的指针类型。void和void*是不同的。 虚空意味着没有,但虚空可以是任何东西。 void(void*)指针可以强制转换为任何其他指针

为什么malloc()返回void*


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

请不要被空白所迷惑。在C中,您应该这样阅读声明:


int*i;
将被解读为-变量
*i
,它给出一个int或变量
i
,它是指向int的指针。函数也是如此。类似于
void*fun()
意味着
fun
是一个返回指向
void
的指针的函数。请检查更完整的答案。

void
什么都不是,但是指向
void
的指针仍然是一个指针,只是没有指明它指向的数据类型。你的意思是
int*fun()
@BasileStarynkevitch谢谢,我的错。更正了。