![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
В языке Си допускаются указатели не только на данные, но и на функции. Они позволяют, например, создать функцию, строящую таблицу значений любой другой функции (с заданным видом списка параметров); при этом конкретный вызов этой другой функции осуществляется через указатель на функцию.
Рассмотрим методику работы с указателями на функции.
1. Как и любой объект языка Си, указатель на функции необходимо декларировать. Формат объявления указателя на функции следующий:
тип (* переменная-указатель)(список параметров);
т.е. декларируется указатель, который можно устанавливать на функции, возвращающие результат указанного типа и которые имеют указанный список параметров. Наличие первых круглых скобок обязательно, так как без них – это декларация функции, которая возвращает указатель.
Например, объявление вида:
double (* p_f)(char, double);
говорит о том, что декларируется указатель p_f, который можно устанавливать на функции, возвращающие результат типа double и имеющие два параметра: первый – символьного типа, а второй – вещественного типа.
2. Идентификатор функции считается константным указателем, поэтому для того, чтобы установить переменную-указатель на конкретную функцию, достаточно ей присвоить ее идентификатор:
переменная-указатель = ID_функции;
Например, имеется функция с прототипом: double f1(char, double); тогда операция
p_f = f1;
установит указатель p_f на данную функцию.
Идентификатор функции может быть присвоен указателю и по-другому:
double f1(char C, double D){
... // тело функции f1
}
void FunOut(double (*p_f)(char, double)){
... // тело функции FunOut
}
void main(){
... // тело функции main
FunOut(f1);
... // тело функции main
}
Здесь при вызове функции FunOut в нее передается аргумент - указатель на функцию f1, который присваивается параметру p_f.
3. Вызов функции после установки на нее указателя выглядит так:
(*переменная-указатель)(список аргументов);
или
Дата публикования: 2014-11-04; Прочитано: 201 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!