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

UptoLike

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

В качестве имени функции может выступать указатель на нее. Список фактических параметров
функции (аргументов) представляет собой список выражений, число и тип данных которых должны
совпадать с формальными параметрами функции. Соответствие между формальными и фактическими
параметрами устанавливается по их взаимному расположению в списках. Если типы данных формаль-
ных и фактических параметров не совпадают, то компилятор пытается автоматически преобразовать
тип фактических параметров, если это допустимо.
Большое внимание следует уделять правилам передачи параметров при обращениях к функциям. В
языке С предусмотрена только передача параметров по значениям. Поэтому формальные параметры
функции локализованы в ней и не доступны вне определения функции. Никакие операции над парамет-
рами функции, а также ее внутренними переменными не влияют на фактические параметры. Передача
параметров по значению предполагает выполнение следующих действий:
1) при подготовке функции к выполнению выделяются участки памяти для формальных парамет-
ров. После этого формальные параметры становятся внутренними объектами функции;
2) вычисляются значения выражений, использованных в качестве фактических параметров при вы-
зове функций;
3) значения выраженийфактических параметров копируются в участки памяти, выделенные для
формальных параметров;
4) преобразование данных в теле функции выполняется с использованием внутренних объектов, а
в точку вызова функции передается только возвращаемое значение;
5) после выхода из функции память, выделенная для формальных параметров, освобождается.
Вызов функции всегда является выражением, но его использование в программе зависит от типа
возвращаемого значения. Если в качестве типа возвращаемого значения указан тип void, то функция не
возвращает ничего. Следовательно, ее нельзя использовать в выражениях, а нужно вызывать в виде от-
дельного оператора:
имя_функции(список фактических параметров);
Помимо этого может отсутствовать и список фактических параметров, если вместо списка фор-
мальных параметров функции использовано ключевое слово void в ее заголовке.
В случае использования только параметров-значений функция не имеет никакой возможности из-
менять объекты вызывающей функции при выполнении своих операторов. Однако подобная необходи-
мость появляется достаточно часто (примером может служить функция scanf). Для этого существует
косвенная возможностьиспользование в качестве формальных параметров функции указателей. При
помощи указателя в вызываемую функцию можно передать адрес фактического объекта, принадлежа-
щего вызывающей функции. Применяя операцию разыменования '*' можно получить доступ к любому
объекту программы.
П р и м е р 35
Определение модуля числа
#include <stdio.h>
void modul(int *i)
{*i = *i > 0 ? *i : -*i;}
void main()
{
int n;
scanf ("%d", &n); printf("%d", modul(&n));
}
13.2 Массивы в качестве параметров функции
Если в качестве параметра функции выступает массив, то внутрь функции передается только адрес
его начала. Поэтому абсолютно равноправными будут прототипы функций