Определение функции
Функция состоит из двух частей: ЗАГОЛОВКА ФУНКЦИИ, создающего " интерфейс" функции к внешнему миру, и ТЕЛА ФУНКЦИИ, реализующего заложенный и нее алгоритм с использованием внутренних локальных данных. Вместе заголовок и тело составляют ОПРЕДЕЛЕНИЕ ФУНКЦИИ.
//------------------------------------------------------bk15-01.cpp
// Результат функции
// | Имя функции
// | |
int sum(int A[], int n)
// -------------- Формальные параметры
//---- ------------------ Тело функции (блок)
{
int s,i; // Локальные(автоматические) переменные блока
for (i=s=0; i<n; i++) // Последовательность операторов блока
s +=A[i];
return s ; // Значение результата в return
}
Определение функции представляет собой всего лишь " заготовку" программы. Выполнение ее происходит тогда, когда в процессе вычисления выражения встречается вызов функции.
void main()
{
int ss, x, B[10]={ 1,6,3,4,5,2,56,3,22,3 };
ss = x + sum(B,10) ;
// Вызов функции : ss = x + результат sum(фактические параметры )
}
Интерфейс функции состоит из формальных параметров (вход) и результата (выход).
ФОРМАЛЬНЫЕ ПАРАМЕТРЫ -- это собственные переменные функции, которым при ее вызове присваиваются значения фактических параметров.
В заголовке функции имеется список формальных параметров, в котором они имеют синтаксис определений обычных переменных. Использование их в теле функции также не отличается от обычных переменных.
контексте (окружении) выражения, где был произведен ее вызов
Поскольку все переменные в Си имеют типы, тип результата также должен быть определен. Это делается в заголовке функции тем же способом, что и для обычных переменных. Используется тот же самый синтаксис, в котором имя функции выступает в роли переменной-результата:
int sum(... // Результат - целая переменная
char *FF(... // Результат - указатель на символ
Значение переменной-результатa устанавливается в операторе return , который производит это действие наряду с завершением выполнения функции и выходом из нее.
Между ключевым словом return и ограничивающим символом ";" может стоять любое выражение, значение которого и становится результатом функции. Если вспомнить еще и о преобразованиях типов, то при таком "присваивании" результата таковое должно производиться от типа, соответствующего выражению к типу результата функции:
double FF()
{ int nn; // Эквивалент
return (nn+1) ; // FF = (double)(nn + 1)
Имеется специальный пустой тип результата - void , который обозначает, что функция не возвращает никакого результата и, соответственно, не может быть вызвана внутри выражения. Оператор return в такой функции также не содержит никакого выражения:
void Nothing() { return; }
Вызов функции выглядит как имя функции, за которым в скобках следует список фактических параметров.
ФАКТИЧЕСКИЕ ПАРАМЕТРЫ - - переменные, константы или выражения, значения которых при вызове присваиваются соответствующим по списку формальным параметрам.
Тело функции представляет собой уже известную нам синтаксическую конструкцию -блок. Это простая последовательность операторов, заключенная в фигурные скобки. После открывающейся скобки в блоке могут стоять определения переменных. Это ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ блока (в данном случае тела функции). Они обладают следующими свойствами:
-локальные переменные создаются в момент входа в блок (тело функции) и уничтожаются при выходе из нее;
-локальные переменные могут использоваться только в том блоке, в котором они определены. Это значит, что за пределами блока они "не видны";
-инициализация локальных переменных заменяется присваиванием им значений во время их создания при входе в блок. Поскольку под инициализацией понимается процесс установки начальных значений переменных в процессе трансляции (которые затем попадают в программный код), то для локальных переменных это сделать принципиально невозможно.
Локальные переменные в теле функции обозначаются в Си термином АВТОМАТИЧЕСКИЕ ПЕРЕМЕННЫЕ.