我已经看到函数在其参数中传递指针,并且它们在动态使用中很常见,在执行不同的步骤后执行不同的函数。但是我在头文件中遇到了这种表示:
void *allocate_mem(u_int32_t n);
有关如何使用的任何线索?函数是指针还是返回指针?
答案 0 :(得分:4)
请参阅my comments。
如果您有任何问题,请使用cdecl.org ...进入void *allocate_mem(u_int32_t)
,我们会收到以下信息。
将
allocate_mem
声明为函数(u_int32_t
),返回指向void
的指针。
因此,我们知道allocate_mem
会返回void *
。现在,您可能想知道为什么您需要指向void
...
指向
void
的指针可以转换为指向任何不完整或对象类型的指针。指向任何不完整或对象类型的指针可能会转换为指向void
的指针,然后再返回;结果应该等于原始指针。
因此,您可以转换allocate_mem
的结果以满足您的需求,例如
float *data = allocate_mem(1024 * sizeof(float))
答案 1 :(得分:1)
该函数返回指向新内存分配的指针。
返回类型是一个void *,原因是该函数不知道你想用它做什么。
如果要将其用作整数数组,则可以将其转换为int *
例如
int *p = allocate_mem(4*10);
参数是需要分配的内存大小(字节)。因此,为4字节整数分配40个字节会产生10个4字节整数的数组。
答案 2 :(得分:0)
void *
是指向某事物的指针。它所指出的内容尚不清楚,但我们的想法是将它作为一种中性指针。 void*
参数可以采用任何类型的指针类型。但是在处理这些指针时需要非常小心,因为它们有自己的一组限制。您不能取消引用void *它必须转换为有效类型。应用指针算法也是如此。
请参阅此讨论以获取更多详细信息 - C - pointers in functions and void variable type?