我见过在参数中传递指针的函数,它们在动态使用中很常见,在几个步骤后执行不同的函数。但是我在头文件中遇到了这种表示:
void *allocate_mem(u_int32_t n);
关于如何使用它的任何线索?函数是指针还是返回指针?
我见过在参数中传递指针的函数,它们在动态使用中很常见,在几个步骤后执行不同的函数。但是我在头文件中遇到了这种表示:
void *allocate_mem(u_int32_t n);
关于如何使用它的任何线索?函数是指针还是返回指针?
见我的评论。
每当您有这样的问题时,请使用cdecl.orgvoid *allocate_mem(u_int32_t)
... 输入,我们得到以下信息。
声明
allocate_mem
为 function(u_int32_t
) 返回指向void
.
所以,我们知道allocate_mem
return void *
。现在,您可能想知道为什么您会想要一个指向void
...
C99 标准的 §6.3.2.3.1 规定如下。
指向的指针
void
可以转换为指向任何不完整或对象类型的指针或从指针转换。指向任何不完整或对象类型的指针可以转换为指向void
和返回的指针;结果应与原始指针比较。
因此,您可以转换结果allocate_mem
以满足您的需求,例如
float *data = allocate_mem(1024 * sizeof(float))
该函数返回一个指向新分配内存的指针。
返回类型是 void*,原因是函数不知道你想用它做什么。
如果要将其用作整数数组,请将其转换为 int*
例如。
int *p = allocate_mem(4*10);
参数是需要分配的内存大小(字节)。因此,为 4 字节整数分配 40 字节会形成一个由 10 个 4 字节整数组成的数组。
Avoid *
是指向某物的指针。它所指向的内容尚不清楚,但其想法是让它充当一种中性指针。void*
参数可以采用任何类型的指针类型。然而,在处理这些指针时需要非常小心,因为它们有自己的一组限制。您不能取消引用 void* 它必须强制转换为有效类型。应用指针算法也是如此。
有关更多详细信息,请参阅此讨论 - C - 函数中的指针和 void 变量类型?