Использование указателей на функцию

 

Синтаксис языка С++ позволяет использовать указатель на функцию.

Имя любой константы ¾ это указатель – константа, равный адресу точки входа в функцию, т.е. адресу ее первой машинной команды. Кроме констант можно также описывать указатели - переменные на функцию в виде:

 

type (*name) (список аргументов); ,

 

где type ¾ тип возвращаемого функцией значения ;

name ¾ имя переменной - указателя на функцию.

 

Указатели на функцию используются в следующих основных случаях :

¾ при использовании их в качестве формальных аргументов в других функциях;

¾ для косвенного вызова других (резидентных) функций (программ), точка входа в которые записывается в известное место ОЗУ.

Пример Вычисление суммы и разности двух чисел программно реализовать с использованием указателя на функцию для доступа к другим функциям

#include < iostream .h >

int difference ( int, int ); //Прототип функции

int sum ( int, int );

void main ( )

{

int (*fun) (int, int );

int x = 20, y = 5, z ;

fun = difference ; //Присваивание адреса одного указателя - другому

z = fun (x, y);

cout << "z = " << z << еndl;

fun = sum; //Присваивание нового адреса указателя

z = fun (x , y );

cout << "z = " << z << endl;

}

int difference (int a , int b) //Описание функции

{ return (a - b);

}

int sum ( int a, int b )

{ return (a + b);}

Как и обычные переменные, указатели на функции можно объединить в массивы, например, если описать функции, т.е. их прототипы в виде:

 

int god ( const void*, const void * ) ;

int chena ( const void*, const void *) ;

int nazv ( const void*, const void * ) ;

int avtor ( const void*, const void * ) ; ,

то можно описать функцию