русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Вказівники на функції


Дата додавання: 2014-04-22; переглядів: 2006.


Для оголошення вказівників на функцію використовують таку синтаксичну конструкцію:

 

тип ( * ім’я_вказівника ) ( список_параметрів_функції )

 

Операція ( ) – «функція», має вищий пріоритет, ніж операція * - «вказівник». Без дужок навколо * ім’я вказівника оголошення буде прототипом функції, яка використовує відповідні параметри і повертає значення, яке є вказівником. У списку параметрів вказують тільки типи без імен.

Для присвоєння вказівнику адреси певної функції можна використовувати її ім’я або вираз & ім’я функції. Коли вказівник отримав адресу функції, його можна застосовувати для звертання до цієї функції таким чином:

 

( * вказівник_на_функцію ) ( параметри_функції )

 

Наприклад:

 

#include <iostream>

using namespace std;

void print_hello( void ) {

cout << "Hello from print_hello" << endl;

}

int plus_one( int a ) {

return a + 1;

}

int main() {

// вказівник на функцію print_hello

void ( * p1 )( void );

print_hello( );

p1 = print_hello;

( *p1 )();

// вказівник на функцію plus_one

int ( * p2 )( int );

cout << plus_one( 1 ) << endl;

p2 = & plus_one;

cout << ( *p2 )( 2 ) << endl;

}

 

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

 

#include <iostream>

using namespace std;

double simpson( double ( * f )( double ), double a, double b, int n ) {

double s = 0, h = ( b - a ) / n, x;

for ( x = a + 0.5 * h; x < b; x += h )

s += ( *f )( x );

return s * h;

}

double f1( double x ) {

return sin( x ) + cos( x );

}

int main() {

cout << simpson( sin, 0, 1, 100) << endl;

cout << simpson( f1, 0, 1, 100) << endl;

double ( * p )( double );

p = f1;

cout << simpson( p, 0, 1, 100) << endl;

}


<== попередня лекція | наступна лекція ==>
Опрацювання структур у функціях | Рекурсивні функції


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн