Указатели на функции в С++
Указатель в С++ может ссылаться на функцию. Дело в том, что каждая функция хранится в памяти, соответствующая область памяти имеет адрес, и этот адрес можно записать в переменную- указатель на функцию. Вызов функции осуществляется через адрес, по которому она записана. Этот адрес также называют точкой входа в функцию. Главное правило, которое следует запомнить, состоит в том, что имя функции (без круглых скобок и аргументов) является указателем на функцию. Значение этого указателя есть адрес, по которому записана функция.
Указатель на функцию объявляется следующим образом. Сначала указывается тип результата, который возвращается соответствующей функцией, затем заключенные в круглые скобки оператор * и имя указателя, а после этих круглых скобок еще одни круглые скобки с перечислением типов аргументов функции. Например, если функцией в качестве значения возвращается значение типа int и у нее два аргумента типа double и char, то указатель р на эту функцию объявляется как int (*р) (double, сhar). В качестве значения такому указателю присваивается имя функции, на которую должен ссылаться указатель. Пример использования указателя на функцию приведен ниже .
#includeusing namespace std; //Функция возведения в квадрат: double sqr(double x){ return x*x;} //Функция возведения в куб: double cube(double x){ return x*x*x;} //Функция со вторым аргументом-указателем на функцию: void myfunc(double x,double (*f)(double)){ cout << f(x) << endl;} int main(){ double z; //Указатель на функцию: double (*p)(double); cout << "z = "; cin >> z; //Указателю присваивается значение: p=cube; //Использование указателя и имени функции: myfunc(z,sqr); myfunc(z,p); cout << p(z) << endl; //Адрес функции: cout << sqr << endl; cout << cube << endl; cout << p << endl; return 0; }