这个表达式是什么:void *(* fct)(void *(*)(void *),void *)?

时间:2015-03-22 19:41:48

标签: c pthreads

我知道,例如

void *(*myFuncName)(void*)

是一个函数指针,它接受并返回void*

这是一个带2个参数的指针吗? void指针返回void*void*的该类型的另一个函数? 我只是猜猜..

4 个答案:

答案 0 :(得分:4)

void* (*fct)(void*(*)(void*), void*);  

fct声明为指向

的函数的指针
  • 返回void *
  • 期望它的第一个参数是类型的指针,指向期望void *并返回void *
  • 的函数
  • 期望其第二个参数的类型为void *

答案 1 :(得分:1)

   void* (*fct)(void*(*)(void*), void*)
// 44444  2111 333333333333333333333333

fct(1)是指向返回指针(4)的函数(3 *)的指针(2)。

(*)函数参数为void*(*)(void*)void*

void*(*)(void*)指向函数的指针,该函数接受指针参数并返回指针

void*一个指针

答案 2 :(得分:0)

cdecl.org和我的编译器都同意。这是一个语法错误。有更多的近括号而不是开括号。

一个名为x的函数指针,它返回void *并带有两个void *类型的参数,如下所示:

void *(*x)(void *, void *);

答案 3 :(得分:0)

向左阅读:

myFuncName是一个指针。什么是指针?

向右阅读:

myFuncName是一个指向的函数的指针,该函数接受两个参数,其中一个是函数指针(带有一个void*参数并返回void*,类似于myFuncName) ,另一个属于*void*类型,返回void* 。函数返回什么?

向左阅读:

myFuncName是一个指向函数的指针,该函数接受两个参数(见上文)并返回void*

正如https://stackoverflow.com/users/47453/bill-lynch指出的那样,只要您的语法正确,cdecl就会告诉您相同的内容。

祝你好运 安德烈亚斯