ВУЗ:
Составители:
Рубрика:
13.2 Массивы в качестве параметров функции
Если в качестве параметра функции выступает массив, то внутрь функции передается только адрес его начала. Поэтому
абсолютно равноправными будут прототипы функций
double sum(int n, double a[]);
и
double sum(int n, double *a);
Так как массив всегда передается в функцию как указатель, то внутри функции производится изменение элементов мас-
сива – фактического параметра, который указан как параметр при вызове функции. Имя массива внутри вызываемой функ-
ции уже не воспринимается как константный указатель, а обладает всеми свойствами указателя.
13.3 Указатели на функции
Рассмотрим выражение "вызов функции" подробнее:
обозначение_функции(список фактических параметров);
здесь обозначение функции воспринимается как "указатель на функцию, возвращающую значение указанного типа". В языке
С указателем на функцию может выступать выражение или переменная, представляющие адрес функции. Самым простым
указателем на функцию является ее имя, которое используется в определении функции и при ее описании. В этом случае имя
функции воспринимается как константный указатель, который жестко связан с функцией и не может быть перенастроен на
другой программный объект.
Указатель на функцию как переменная должен быть определен отдельно от определения или прототипа какой-либо
функции:
тип (*имя_указателя)(спецификация параметров);
здесь тип – тип возвращаемого функцией значения; имя указателя – идентификатор; спецификация параметров – определе-
ние состава и типов параметров функции.
Единственным требованием является полное соответствие определения указателя-переменной и прототипа функции,
адрес которой ему присваивается.
К указателям на функцию можно применять только операцию присваивания.
Переменная-указатель на функцию, связанная с конкретной функцией, может использоваться для вызова этой функции.
Возможны два варианта построения выражения:
1) (*указатель)(список фактических параметров );
2) указатель(список фактических параметров ).
П р и м е р 36
#include <stdio.h>
#include <math.h>
int main()
{
unsigned i;
double x;
double (* fn)(double);
puts("Что считаем?");
puts("1. Синус");
puts("2. Косинус");
puts("3. Логарифм");
scanf("%d%lf", &i, &x);
switch (i)
{
case 1: fn = sin; break;
case 2: fn = cos; break;
case 3: fn = log;
}
printf("%g", fn(x));
return 0;
}
Указатель на функцию может являться параметром любой функции. В этом случае переменная-указатель на функцию
включается в список формальных параметров вызываемой функции. Рассмотрим пример функции для вычисления опреде-
ленного интеграла методом трапеций.
Страницы
- « первая
- ‹ предыдущая
- …
- 31
- 32
- 33
- 34
- 35
- …
- следующая ›
- последняя »