Покажчики на функції - студопедія

Щоб зрозуміти, як працюють покажчики на функції, треба мати на увазі наступне. У міру компіляції функцій вихідний код, записаний за правилами мови С ++, перетворюється в об'єктний і встановлюється точка входу, до якої відбувається звернення при виконанні функції.

Покажчик на функцію в програмі визначається наступним чином:

тіп_функціі (* імя_ покажчика) (спісок_параметров);

float (* PFun) (int, int);

float * PFun (int, int) ;,

то компілятор сприйме його як прототип функції з ім'ям PFun з двома цілочисельними параметрами, що повертає значення покажчика типу float *. Іншими словами, це не покажчик на функцію.

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

float Aver (int x, int y)

Тоді оголошений вище покажчик на функцію PFun можемо визначити за допомогою наступного присвоювання:

float Res; Res = (* PFun) (5, 2);

float * PFun (int, int) = Aver;

Як конкретний практичного використання покажчика на функцію розглянемо наступний приклад.

Приклад 1. (+) Скласти функцію, яка за формулою Сімпсона обчислює значення певного інтеграла від довільної функції однієї змінної. Функцію перевірити для обчислення двох інтегралів:

Функція Integral для обчислення певного інтеграла від довільної функції за формулою Сімпсона має наступні параметри: межі інтегрування a і b; кількість точок, на які розбивається відрізок [a, b], котороеоб'явлено з типом float, щоб виключити перетворення типів при реалізації алгоритму; покажчик на функцію, для якої обчислюється визначений інтеграл.

float Integral (float, float, float, float (* Fun) (float));

// Дві тестові функції, для яких обчислюється інтеграл.

// Обчислення першого інтеграла.

a = -1; b = 1; n = 100; I = Integral (a, b, n, Function1); cout<

// Обчислення другого інтеграла.

a = 0; b = 1; n = 100; I = Integral (a, b, n, Function2); cout<

void Read (int x)

void Append (int x)

Приклад 2. (+) Динамічний масив покажчиків на функції. Для x = 0, 0.2, ..., 1 вивести таблицю значень трьох функцій.

// Тексти двох функцій. Третя функція - стандартна cos (x).

double MyExp (double x)

double Myq (double x)

/ * Оголошуємо і створюємо масив покажчиків на функції з одним речовим параметром. * /

double (* (* fun)) (double) = new (double (* [n]) (double));

// Елементам створеного масиву присвоюємо імена функцій.

// Цикл для зміни x

for (float x = 0; x<1; x+=0.2)

/ * Цикл для виведення значень всіх функцій для одного фіксованого значення x. * /

printf ( "% 20.6f", fun [j] (x));