Информатика и технология программирования

       

Определение функции


Функция состоит из двух частей: ЗАГОЛОВКА ФУНКЦИИ, создающего " интерфейс" функции к внешнему миру, и ТЕЛА ФУНКЦИИ, реализующего заложенный и нее алгоритм с использованием внутренних локальных данных. Вместе заголовок и тело составляют ОПРЕДЕЛЕНИЕ ФУНКЦИИ.


//------------------------------------------------------bk15-01.cpp


// Результат функции


// | Имя функции


// | |


int sum(int A[], int n)
// -------------- Формальные параметры


//---- ------------------ Тело функции (блок)


{
int s,i; // Локальные(автоматические) переменные блока


for (i=s=0; i&#60n; 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; }

Вызов функции выглядит как имя функции, за которым в скобках следует список фактических параметров.

ФАКТИЧЕСКИЕ ПАРАМЕТРЫ - - переменные, константы или выражения, значения которых при вызове присваиваются соответствующим по списку формальным параметрам.



Тело функции представляет собой уже известную нам синтаксическую конструкцию -блок. Это простая последовательность операторов, заключенная в фигурные скобки. После открывающейся скобки в блоке могут стоять определения переменных. Это ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ блока (в данном случае тела функции). Они обладают следующими свойствами:


-локальные переменные создаются в момент входа в блок (тело функции) и уничтожаются при выходе из нее;


-локальные переменные могут использоваться только в том блоке, в котором они определены. Это значит, что за пределами блока они "не видны";


-инициализация локальных переменных заменяется присваиванием им значений во время их создания при входе в блок. Поскольку под инициализацией понимается процесс установки начальных значений переменных в процессе трансляции (которые затем попадают в программный код), то для локальных переменных это сделать принципиально невозможно.



Локальные переменные в теле функции обозначаются в Си термином АВТОМАТИЧЕСКИЕ ПЕРЕМЕННЫЕ.


Содержание раздела