2017-07-03 57 views
2

malloc函数声明:混淆malloc和释放calloc功能用C

void *malloc(size_t size); 

这里,malloc返回void指针。所以,A void函数什么也没有返回,然后

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

例如:

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

是什么返回值从malloc()持有???

+4

'void'是* nothing *,但是指向'void'的*指针仍然是一个指针,它只是未指定它指向的数据类型。 –

回答

6

这可能是对语言的设计者的一部分不幸的选择,但他们决定重用void他们void*结构,其中近反转其含义是:当void表示“没有返回值”,void*的意思是“返回一个指向什么“。

实质上,void*是指向未指定对象的指针。必须将其转换为指向特定类型的指针,然后才能对其进行解引用。这正是malloccalloc返回的指针种类。

2

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

为什么malloc()返回void *?

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

1

尽量不要被白色空间弄糊涂。在C语言中,你应该阅读的声明是这样的:

int *i;是被解读为 - 变量*i这给一个int 变量i这是一个指向一个int。功能也一样。类似void *fun()意味着fun是一个函数,它返回指向void的指针。检查this以获得更完整的答案。

+0

你的意思是'int * fun()' –

+0

@BasileStarynkevitch谢谢,我的不好。纠正。 – babon