Указатель на функцию
Каждая функция характеризуется типом возвращаемого значения, именем и списком типов ее параметров. Если имя функции использовать без последующих скобок и параметров, то он будет выступать в качестве указателя на эту функцию, и его значением будет выступать адрес размещения функции в памяти. Это значение можно будет присвоить другому указателю. Тогда этот новый указатель можно будет использовать для вызова функции. Указатель на функцию определяется следующим образом:
тип_функции(*имя_указателя)(спецификация параметров)
Примеры:
1. int f1(char c){. . . . }//определение функции
int(*ptrf1)(char);//определение указателя на функцию f1
2. char*f2(int k,char c){. . . .}//определение функции
char*ptrf2(int,char);//определение указателя
В определении указателя количество и тип параметров должны совпадать с соответствующими типами в определении функции, на которую ставится указатель.
Вызов функции с помощью указателя имеет вид:
(*имя_указателя)(список фактических параметров);
Пример.
#include <iostream.h>
void f1()
{cout<<”\nfunction f1”;}
void f2()
{cout<<”\nfunction f2”;}
void main()
{
void(*ptr)();//указатель на функцию
ptr=f2;//указателю присваивается адрес функции f2
(*ptr)();//вызов функции f2
ptr=f1;//указателю присваивается адрес функции f1
(*ptr)();//вызов функции f1с помощью указателя
}
При определении указатель на функцию может быть сразу проинициализирован.
void (*ptr)()=f1;
Указатели н функции могут быть объединены в массивы. Например, float(*ptrMas[4])(char) – описание массива, который содержит 4 указателя на функции. Каждая функция имеет параметр типа char и возвращает значение типа float. Обратиться к такой функции можно следующим образом:
float a=(*ptrMas[1])(‘f’);//обращение ко второй функции
Пример.
#include <iostream.h>
#include <stdlib.h>
Дата добавления: 2015-08-26; просмотров: 501;