Указатель может быть использован для ссылки на функцию, точно также как и для ссылки на переменную.
Пример 1
int main ()
{
int (*funptr)(int, int);     /*объявляется указатель на функцию*/
int maxfun(int, int);        /*объявляется функция,  на которую будет ссылаться указатель*/
...
funptr = maxfun;             /*инициализация указателя*/
c=(*funptr)(a,b);            /* c=maxfun(a,b);*/
...
}
int maxfun(int i, int j)
{
return (i>j)?i:j;
}
Пример 2
Пусть функции, выполняющие различные запросы пользователя, определены в другом месте.
int main()
{
int append(void), find(void), list(void);
int remove(void), replace(void), substitute(void);

static int (*command[])(void) = {
     append,
     find,
     list,
     remove,
     replace,
     substitute};
int i, (*fp)(void);
char string[80];
...
scanf("%s", string);
...
i = is_keyword(string);
if (i==-1)
   exit(0);
fp=comand[i];      /*инициализирует указатель на функцию*/
(*fp)();           /*вызов функции(*command[i])()*/
...
}
Чтобы использовать имя функции в выражении, функция должна быть явно объявлена. В функции main() объявляются имена функций. Затем инициализируется массив указателей command[] адресами функций. Объявляется указатель на функцию fp. Читается запрос пользователя и передается функции is_keyword(), возвращающей индекс соответствующего элемента массива адресов функций. Этот индекс используется для инициализации указателя fp, определяющего требуемую функцию..