Рассмотрим теперь вопрос о том, почему в языке С функция введена как один из производных типов. Необходимость в таком типе связана, например, с задачами, в которых функция (или ее адрес) должна выступать в качестве параметра другой функции или в качестве значения, возвращаемого другой функцией. В этом случае используется «указатель на функцию».
Самый употребительный «указатель на функцию» – это ее имя (идентификатор). Идентификатор <имя_функции> в ее определении и в ее прототипе подобен имени массива и является указателем-константой. Он навсегда связан с определяемой функцией и не может быть «настроен» на что-либо иное, чем ее адрес.
«Указатель на функцию» (как переменная) вводится отдельно от определения и прототипа какой-либо функции. Для этих целей используется конструкция:
<тип> (*<имя_указателя>)(<спецификация_параметров>);
где <тип> - определяет тип возвращаемого функцией значения;
<имя_указателя> - идентификатор, произвольно выбранный программистом;
<спецификация_параметров> - определяет состав и типы параметров функции.
В отличие от имени функции указатель func0 является переменной, т.е. ему можно присваивать значения других указателей, определяющих адреса функций программы. Важно, что тип указателя-переменной должен полностью соответствовать типу функции, адрес которой ему присваивается.