logo search
ООП для Заоч / Пинчук Лозовская Программир на С

8.4. Покажчики на функції

Оголошення покажчика на функцію має такий вигляд:

тип (*pf)(параметри);

Тепер pf - покажчик на функцію зазначеного типу. Тип функції визначає кількість і типи її параметрів, а також тип значення, що повертається функцією.

Ім'я будь-якої функції F є покажчиком-константою на функцію відповідного типу (згадайте, схожа ситуація має місце у випадку масивів: ім'я не динамічного масиву є покажчиком-константою на масив).

Якщо ми маємо оголошений покажчик на функцію pf, йому можна привласнити адресу функції відповідного типу:

pf = F;

Після такого присвоювання виклик функції F можна записати так:

pf(параметри),

або так:

(*pf)(параметри).

Обидва виклики будуть еквівалентні звичайному виклику функції F:

F(параметри).

Оголошення покажчиків на функції виглядають громіздко і вони не завжди зручні, особливо у заголовках функцій. Якщо це так, то записи оголошень можна спростити й зробити їх більше зрозумілими, якщо попередньо використати оголошення синоніму типу typedef :

typedef float (*FUN)(float,float);

FUN pf;

Тут у першому рядку визначається синонім типу FUN, що відповідає покажчику на функцію із двома аргументами типу float та значенням типу float, що повертається. У другому рядку оголошується покажчик pf на функцію зазначеного типу.

Особливо зручним такий прийом виявляється в тих випадках, коли потрібно оголосити масив покажчиків на функцію:

FUN pf[10];

а також при запису параметрів функції типу покажчик на функцію.

Нижче наведено приклад використання масиву покажчиків на функцію. У цьому прикладі запис pf[i](a,b) означає виклик однієї з трьох функцій залежно від значення індексу i .

// Приклад 1

#include <syst.h>