ФУНКЦИИ
Функцией называется фрагмент программы, в который передаются ПАРАМЕТРЫ, и который ВОЗВРАЩАЕТ значение (или ничего).
Прелесть функции в том, что ее можно выполнить много раз из разных точек программы.
Функция состоит из
ОБЪЯВЛЕНИЯ - описания того, как она что-то вычисляет Объявление бывает ровно одно.
ВЫЗОВОВ - с конкретными значениями параметров, что именно она должна на этот раз вычислить. Вызовов может быть сколько угодно.
Объявление простейшей функции выглядит так:
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 и вернемся обратно в точку вызова.