Руководство полного чайника по программированию на языке Си

       

ФУНКЦИИ


Функцией называется фрагмент программы, в который передаются ПАРАМЕТРЫ, и который ВОЗВРАЩАЕТ значение (или ничего).

Прелесть функции в том, что ее можно выполнить много раз из разных точек программы.

Функция состоит из

ОБЪЯВЛЕНИЯ - описания того, как она что-то вычисляет Объявление бывает ровно одно.

ВЫЗОВОВ - с конкретными значениями параметров, что именно она должна на этот раз вычислить. Вызовов может быть сколько угодно.

Объявление простейшей функции выглядит так:

int func(int x){

/* Один или несколько операторов, завершающихся оператором return(нечто); */

return x+1; }

int func(...

задает функцию с именем func (имя выдумывает программист, как и имена переменных).

int означает, что функция возвращает целое значение.

...(int x)...



задает список аргументов (или параметров) функции.

...){ ... }

задает тело функции - некую последовательность объявлений переменных и операторов.

return выражение;

задает оператор выхода из функции в точку ее вызова с возвратом значения выражения.

Покажем простой пример ВЫЗОВА этой функции:

int y; ... y = func(5); /* a */ ...продолжение... /* b */

Этот фрагмент работает следующим образом:

y = func(5);

В этой точке мы 1) "записываем на бумажке", что вызов произошел в такой-то строке, таком-то месте нашей программы.

2) Смотрим на ОПРЕДЕЛЕНИЕ функции func.

int func(int x){...

Мы вызвали функцию как func(5). Это значит, что в теле функции x получает начальное значение 5.

То есть ДЛЯ ДАННОГО ВЫЗОВА наша функция (ее тело) превращается в

int x;

x = 5; return x+1;

3) x+1 есть 6.

Далее должен выполниться оператор return.

Он выполняется так:

Мы "читаем с бумажки" - откуда была вызвана функция func, и смотрим на это место. Это было

y = func(5);

Вычеркиваем func(5) и заменяем его ЗНАЧЕНИЕМ выражения, вычисленного в операторе return;

y = 6;

4) Выполняем этот оператор и переходим к продолжению.

int y, z, w;

y = func(5); z = func(6); w = func(7) + func(8) + 1;

Превратится в

y = 6; z = 7; w = 8 + 9 + 1;

При этом мы четыре раза "прыгнем" на определение функции func(), пройдем все ее операторы с разными значениями параметра x и вернемся обратно в точку вызова.



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