Если в заголовке функции не указан тип возвращаемого параметра, то по умолчанию возвращается с помощью оператора return переменная типа int.
Если функция возвращает результат в точку вызова, то оператор return обязателен. Оператор return в теле программы может встречаться нужное число раз. В таком случае функция выполняет свою работу до тех пор пока не встретит первый оператор return.
int big (int a, int b)
{
if (a>b) return a; // если a>b, то программа завершится здесь
else return b; // иначе здесь
}
int bigint (int a, int b, int c)
{
if ( (a>b) && (a>c) ) return = a;
else if (b>c) return = b;
else return = c;
}
Если функция не возвращает результат в точку вызова, то return может отсутствовать и выполнение функции завершается по концу тела функции.
Если функция возвращает результат в точку вызова, то вызов такой функции представляет собой:
1. операнд в операторе:
· в правой части оператора присвоения;
· в списке фактических параметров;
· в операторе условия выражением условия;
· в выборе варианта селектором;
· в цикле с предусловием и постусловием;
· в методе в/в cout.
2. самостоятельный оператор.
Формат вызова функции:
имя_функции ([список фактических параметров]);
· имя_функции совпадает с именем вызываемой функции;
· список фактических параметров должен совпадать со списком формальных параметров по количеству, по месту положения, по типу.
Когда, по ходу выполнения программы встречается имя функции, она вызывается, и управление передается функции. Вызывающая программа переходит в состояние ожидания. После выполнения функции управление программы передается обратно в вызывающую среду, которая продолжает свою работу. При передаче управления функции, её тело помещается в раздел ОП для временного хранения. В этом разделе организуются все операнды и коды функции. По завершению работы связь с этим участком памяти теряется.
Пример функции, возвращающей указатель
#include <iostream>
using namespace std ;
char* fSubStr ( char*, char* ) ;
int main ( )
{
char* s = "A Toyota! Race fast... safe car: a Toyota" ;
for ( p = ps, r = pss; *r && *p == *r; p++, r++ ) ;
if ( ! *r ) return ps ;
ps++ ;
}
return 0 ;
}
Параметры функции определяются списком формальных параметров. Они позволяют при каждом вызове функции работать с переменными, определенными при вызове функции, называющиеся фактическими параметрами. Рассмотрим предыдущий пример:
cout<<”Куб числа ”<< 1.2<<” = ”<<cube(1.2);//фактический параметр 1.2 // соответствует описанию формального //параметра
double cube(double x) // double x – формальный параметр
Список формальных параметров является элементом заголовка функции. Область действия формальных параметров – тело функции, в которой они объявлены, и являются локальными. Фактические параметры передаются в вызываемую функцию при её вызове, заменяя формальные параметры на фактические (конкретные) для обработки данных. Между формальными и фактическими параметрами должно быть взаимно - однозначное соответствие:
1. количество формальных и фактических параметров должно быть одинаково, за исключением функций с переменным количеством формальных параметров;
2. последовательность формальных и соответствующих им фактических параметров должна быть соответственна: первому формальному параметру соответствует первый фактический, второму – второй и т.д.;
3. типы формальных и соответствующих им фактических параметров должны быть одинаковыми или совместимыми.
Сопоставление формальных и фактических параметров производится динамически при каждом вызове функции, в последовательности: первому формальному параметру соответствует первый фактический, второму – второй и т.д. Формат объявления формальных параметров: