0

我见过在参数中传递指针的函数,它们在动态使用中很常见,在几个步骤后执行不同的函数。但是我在头文件中遇到了这种表示:

void *allocate_mem(u_int32_t n);

关于如何使用它的任何线索?函数是指针还是返回指针?

4

3 回答 3

4

我的评论

每当您有这样的问题时,请使用cdecl.orgvoid *allocate_mem(u_int32_t) ... 输入,我们得到以下信息。

声明allocate_mem为 function( u_int32_t) 返回指向void.

所以,我们知道allocate_memreturn void *。现在,您可能想知道为什么您会想要一个指向void...

C99 标准的 §6.3.2.3.1 规定如下。

指向的指针void可以转换为指向任何不完整或对象类型的指针或从指针转换。指向任何不完整或对象类型的指针可以转换为指向void和返回的指针;结果应与原始指针比较。

因此,您可以转换结果allocate_mem以满足您的需求,例如

float *data = allocate_mem(1024 * sizeof(float))
于 2012-08-19T14:43:16.993 回答
1

该函数返回一个指向新分配内存的指针。

返回类型是 void*,原因是函数不知道你想用它做什么。

如果要将其用作整数数组,请将其转换为 int*

例如。

int *p = allocate_mem(4*10);

参数是需要分配的内存大小(字节)。因此,为 4 字节整数分配 40 字节会形成一个由 10 个 4 字节整数组成的数组。

于 2012-08-19T14:31:33.957 回答
0

Avoid *是指向某物的指针。它所指向的内容尚不清楚,但其想法是让它充当一种中性指针。void*参数可以采用任何类型的指针类型。然而,在处理这些指针时需要非常小心,因为它们有自己的一组限制。您不能取消引用 void* 它必须强制转换为有效类型。应用指针算法也是如此。

有关更多详细信息,请参阅此讨论 - C - 函数中的指针和 void 变量类型?

于 2012-08-19T14:35:31.170 回答