void * function()是指向函数的指针还是返回void *的函数?

use*_*151 26 c c++ pointers function-pointers declaration

我对的含义感到困惑void *function()
它是指向函数的指针还是返回的函数void*?我一直在数据结构上使用它作为返回指针的递归函数,但是当我在多线程(pthread)中看到代码时,会有一个相同的函数声明。现在我很困惑他们之间有什么区别。

Vla*_*cow 38

该函数具有返回类型void *

void *function();
Run Code Online (Sandbox Code Playgroud)

因此,在这种情况下,我总是喜欢将符号*与函数名称分开,例如

void * function();
Run Code Online (Sandbox Code Playgroud)

正如Jarod42注释中所 指出的,您可以使用尾随返回类型(如

auto function() -> void *;
Run Code Online (Sandbox Code Playgroud)

如果要声明指向函数的指针,则应编写

void ( *function )();
Run Code Online (Sandbox Code Playgroud)

要么

void * ( *function )();
Run Code Online (Sandbox Code Playgroud)

或指向函数的指针,该指针返回指向函数的指针

void * ( *( *function )() )();
Run Code Online (Sandbox Code Playgroud)

  • *或指向函数的指针,该指针返回指向函数的指针*这就是`typedef`用于... ;-) (3认同)
  • 这就是为什么,我更喜欢编写`void * function();`。那不是那么诱人...;-)(编辑是在编写此代码时发生的。) (2认同)

bta*_*bta 7

每当不确定C语法问题时,我都喜欢使用cdecl实用程序(在线版本)为我解释。它在C语法和英语之间翻译。

例如,我输入您的示例,void *foo()然后返回

将foo声明为函数,返回指向void的指针

为了查看其他语法,我输入declare foo as pointer to function returning void并返回

无效(* foo)()

当您在一个表达式中具有多个类型的转换,星号或方括号时,此功能特别有用。