Основы программирования для автоматизированного проектирования и решения творческих задач - 43 стр.

UptoLike

Составители: 

case 1: fn = sin; break;
case 2: fn = cos; break;
case 3: fn = log;
}
printf("%g", fn(x));
return 0;
}
Указатель на функцию может являться параметром любой функции. В этом случае переменная-
указатель на функцию включается в список формальных параметров вызываемой функции. Рассмотрим
пример функции для вычисления определенного интеграла методом трапеций.
П р и м е р 37
double integral(double (*f)(double), double a, double b, double h)
{
double S = (f(a) + f(b)) * h / 2;
for (a += h; a < b; a += h) S += f(a) * h;
return S;
}
Указатель на функцию как возвращаемое функцией значение. Возможна такая организация про-
граммы, когда выполняемые действия определяются не в точке исполнения, а в некоторой "промежу-
точной" функции. В этом случае промежуточная функция должна вернуть в вызвавшую ее функцию в
качестве результата адрес той функции, которая должна быть выполнена. Такой адрес можно возвра-
тить в виде значения указателя на функцию. Прототип такой функции выглядит следующим образом:
тип (*имя(формальные_параметры1))(формальные_параметры2);
В вызывающей функции необходимо предусмотреть указатель, способный принять такой адрес.
П р и м е р 38
double (*variant(double))(int i)
{
switch (i)
{
case 1: return sin;
case 2: return cos;
default: return NULL;
}
}
int main()
{
double (* p)(double);
p = variant(1);
if (p != NULL) printf("%g", p(3.14));
return 0;
}
13.4 Функции с переменным числом параметров