如何声明指向函数的指针返回另一个函数指针? 请与我分享语法和示例代码段。
此外,在哪种情况下会使用返回函数指针的函数指针?
答案 0 :(得分:9)
使用typedef这是微不足道的:
typedef int(*FP0)(void);
typedef FP0(*FP1)(void);
FP1
是指向函数的指针类型,该函数返回类型为FP0
的函数指针。
至于何时有用,嗯,如果你有一个函数返回一个函数指针,你需要获取或存储一个指向这个函数的指针,这很有用。
答案 1 :(得分:5)
如果您不使用typedef
,则很难。例如,考虑C标准中的signal()
:
extern void (*signal(int, void (*)(int)))(int);
void handler(int signum)
{
...
}
if (signal(SIGINT, SIG_IGN) != SIG_IGN)
signal(SIGINT, handler);
使用typedef更容易:
typedef void Handler(int);
extern Handler *signal(int, Handler *);
void handler(int signum)
{
...
}
if (signal(SIGINT, SIG_IGN) != SIG_IGN)
signal(SIGINT, handler);
请注意,对于signal()
函数,通常只需使用<signal.h>
并让系统担心声明它。
答案 2 :(得分:1)
如果您不想要第二个typedef,
typedef float(*(*fptr_t)(int))(double)
这意味着“declare fptr_t as pointer to function (int) returning pointer to function (double) returning float”(fptr_t:int→(double→float))