Синтаксис указателя на функцию, возвращающую указатель на функцию в C - PullRequest
5 голосов
/ 04 января 2012

Как объявить указатель на функцию, возвращающую указатель на другую функцию?Пожалуйста, поделитесь со мной синтаксисом и примером кода.

Кроме того, в каком сценарии будет использоваться указатель функции, возвращающий указатель функции?

Ответы [ 3 ]

9 голосов
/ 04 января 2012

Это тривиально с typedefs:

typedef int(*FP0)(void);
typedef FP0(*FP1)(void);

FP1 - это тип указателя на функцию, которая возвращает указатель на функцию типа FP0.

.это полезно, ну, это полезно, если у вас есть функция, которая возвращает указатель на функцию, и вам нужно получить или сохранить указатель на эту функцию.

5 голосов
/ 04 января 2012

Если вы избегаете использования typedef, это сложно.Например, рассмотрим signal() из стандарта C:

extern void (*signal(int, void (*)(int)))(int);

void handler(int signum)
{
    ...
}

if (signal(SIGINT, SIG_IGN) != SIG_IGN)
    signal(SIGINT, handler);

Используя typedefs, это проще:

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> и позвольте системе беспокоиться об объявлении этого.

1 голос
/ 04 января 2012

Если вам не нужен второй typedef,

typedef float(*(*fptr_t)(int))(double)

это означает, что « объявляет fptr_t как указатель на функцию (int), возвращающий указатель на функцию (double), возвращающую float » (fptr_t: int → (double → float))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...