指向函数的指针的语法,该函数返回C中的函数指针

时间:2012-01-04 06:20:08

标签: c syntax declaration

如何声明指向函数的指针返回另一个函数指针? 请与我分享语法和示例代码段。

此外,在哪种情况下会使用返回函数指针的函数指针?

3 个答案:

答案 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))