Покажчики на функції - студопедія
Щоб зрозуміти, як працюють покажчики на функції, треба мати на увазі наступне. У міру компіляції функцій вихідний код, записаний за правилами мови С ++, перетворюється в об'єктний і встановлюється точка входу, до якої відбувається звернення при виконанні функції.
Покажчик на функцію в програмі визначається наступним чином:
тіп_функціі (* імя_ покажчика) (спісок_параметров);
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));