#c #function #pointers
#c #функция #указатели
Вопрос:
Я хотел бы знать, какова сигнатура функции, которая принимает указатель на функцию и возвращает указатель на функцию?
Спасибо,
Сен
Комментарии:
1. Хм, я никогда не был силен в указателях на функции, но мне кажется, что вам нужно было бы знать, какие входные и выходные функции указателя функции имеют в качестве параметров и что они возвращают, чтобы ответить на этот вопрос.
Ответ №1:
Например.:
void (*f(void (*)(void)))(void)
… который намного более удобочитаем с помощью typedefs
:
typedef void (*VoidFunctionPointer)(void);
VoidFunctionPointer f(VoidFunctionPointer);
Ответ №2:
Самый простой способ сделать это — использовать typedef:
typedef int(*int_fn_ptr)(int);
int_fn_ptr my_func(int_fn_ptr f);
Отказ от ответственности: я не могу проверить, что здесь нет опечаток.
Комментарии:
1. @Georg изначально я думал, что ты ошибаешься. Затем я вспомнил, что указатели на функции странные и не действуют как обычные typedefs, поэтому я откатил свой откат. Без обид, вы можете изменить последнюю точку на смайлик, если хотите, если вы хотите «вернуть свой кредит» : D
2. Извините и тогда неважно, видели, как люди делают странные вещи здесь «для очков» 🙂
Ответ №3:
Вам нужно лучше определить указатель на функцию, принимаемый в качестве параметра, и возвращаемый тип.
В любом случае, вот пример с простой функцией.
#include <stdio.h>
#include <stdlib.h> /* abs */
typedef int fx(int);
/* foo takes a function pointer and returns a function pointer */
fx *foo(fx *bar) {
if (bar) return bar;
return NULL;
}
int main(void) {
fx *(*signature)(fx *) = foo; /* signature points to foo */
if (signature(abs)) printf("okn");
return 0;
}