Я обычно нахожу, что первым шагом при работе с указателем на функцию является использование typedef, чтобы сделать синтаксис более читабельным. Затем такие указатели можно использовать так же, как и любой другой тип данных.
// declares function_ptr as a new type, pointer to function taking an integer parameter and returning void
typedef void (*function_ptr)(int);
// define function pointer p and initialize to point at function one
function_ptr p = function_one;
// call function_one passing 7 as a parameter
(*p)(7);
В этом случае, предполагая, что все функции принимают целое число в качестве параметра, мы можем использовать таблицу указателей для представления всех функций, которые вы хотите вызвать:
function_ptr table[]=
{
function_one,
function_two,
function_three,
function_four,
};
На данный момент довольно легко вызывать любое количество функций с помощью этого метода.
void call_functions(struct_t action, int exemple)
{
if( action >= FUNCTION_ONE && action <= FUNCTION_FOUR )
{
(table[action])(exemple);
}
else
{
printf("Unrecognized function %i. Check that function table is up to date\n", (int)action);
}
}