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谢谢,我的错。更正了。