函数名前面的星号的作用是什么?

我一直对我在大多数 C 程序中看到的不熟悉的函数声明感到困惑。

void *func_name(void *param){
...
}

*对函数意味着什么?我对变量类型(*)的理解是,它创建一个指向另一个变量的指针,因此它能够跟踪后一个变量存储在内存中的地址。但是在这个函数的例子中,我不知道这个 *星号意味着什么。

49633 次浏览

星号属于返回类型,而不属于函数名,即:

void* func_name(void *param) { . . . . . }

这意味着该函数返回一个 void 指针

*属于返回类型。这个函数返回 void *,一个指向某个未指定类型的内存位置的指针。

指针本身是一种变量类型,其值为某个内存位置的地址。C 语言中不同的指针类型表示您希望驻留在指针变量所引用的内存位置的不同类型。因此,int *应该是指一个可以解释为 int的位置。但是 void *是指向未指定类型的内存位置的指针类型。您必须强制转换这样一个 void 指针,以便能够访问它所引用的内存位置的数据。

这意味着该函数返回一个 void*

* 表示函数的返回类型,即 void *

当你声明一个指针变量时,把 *放在变量名或变量类型旁边是一样的:

int *a;
int* a;

我个人认为第一个选择更清楚,因为如果你想使用 ,分隔符定义多个指针,你必须每次重复 *:

int *a, *b;

在这种情况下,使用“ close to type 语法”可能会产生误导,因为如果您编写:

int* a, b;

声明一个指向 int (a)和 int (b)的指针。

因此,在函数返回类型中也可以找到这种语法!