c函数作为指针?

时间:2012-08-19 14:29:26

标签: c

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

void *allocate_mem(u_int32_t n);

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

3 个答案:

答案 0 :(得分:4)

请参阅my comments

如果您有任何问题,请使用cdecl.org ...进入void *allocate_mem(u_int32_t),我们会收到以下信息。

  

allocate_mem声明为函数(u_int32_t),返回指向void的指针。

因此,我们知道allocate_mem会返回void *。现在,您可能想知道为什么您需要指向void ...

的指针 C99标准的第6.3.2.3.1条规定如下。

  

指向 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?