函数名前的星号功能是什么?

Ald*_*dee 60 c pointers function

我对大多数对我来说都不熟悉的函数声明的C程序感到困惑.

void *func_name(void *param){
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

NPE*_*NPE 73

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

void* func_name(void *param) { . . . . . }
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢你们的答案,但是无效指针是什么意思? (14认同)
  • @DanielKamilKozar在C中,我们不会将指针转换为void.我们只是分配它们.这就是它的标准化工作方式.(与C++不同,C++是一个完全不同的野兽.) (9认同)
  • 它只是内存中某个位置的地址.您不知道它指向的是什么 - 您可以将指针强制转换为以后可以使用的正确类型.当然,将它转换为无效类型(例如,假设void*指向float,但是将其转换为char)将产生未定义的结果. (8认同)

Vin*_*Pii 18

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

声明指针变量时,将*接近变量名或变量类型放在同一位置:

int *a;
int* a;
Run Code Online (Sandbox Code Playgroud)

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

int *a, *b;
Run Code Online (Sandbox Code Playgroud)

在这种情况下使用"接近类型语法"可能会产生误导,因为如果你写:

int* a, b;
Run Code Online (Sandbox Code Playgroud)

您正在声明一个指向int(a)和int(b)的指针.

所以,你会发现函数返回类型中的语法!

  • "如果你想使用,运算符定义多个指针".这被认为是糟糕的编程风格,因为它在组合指针和相同类型的变量时会导致错误.解决方案不是混淆你声明指针的方式,解决方案是_declare它自己的一行上的每个变量.在任何情况下都不存在在同一行上声明多个变量的情况.你想通过这样做来实现什么,保存键盘按键?显然,键盘的磨损比代码的可读性更严重...... (4认同)
  • 我从来没有说过我会那样做。我说过这是更喜欢“接近变量名称”语法的一个原因,因为它永远不会造成混乱。我说这是对函数接口中使用的相同语法的可能解释。 (2认同)

x4u*_*x4u 10

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

指针本身就是一个变量类型,它将某个内存位置的地址作为其值.C中的不同指针类型表示您希望驻留在指针变量引用的内存位置的不同类型.所以a int *应该指的是一个可以解释为a的位置int.但是a void *是一种指针类型,它指的是未指定类型的内存位置.您必须转换此类void指针才能访问其引用的内存位置的数据.


hmj*_*mjd 5

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