Формальные параметры функций
Как уже говорилось в разделе «Создание собственных функций» функцию можно описать следующим образом:
тип имя ( формальные параметры )
{
действия
}
Формальные параметры функции — это значения, которые
передаются в функцию. Они указываются через через запятую в круглых
скобках после имени функции. Для каждого параметра указывается тип
(любой из стандартных: массивы, int, bool, datetime, double, color, string).
В функцию не может быть передано более 64 параметров.
Областью видимости формальных параметров функции является сама
функция, т.е. доступ к их значениям может быть получен только в пределах
этой функции.
В описании функции параметрам можно присваивать значения по
умолчанию. При этом следует иметь в виду, что все параметры, следующие
за первым параметром со значением по умолчанию, должны также иметь
значения по умолчанию:
int GetSomethingUseful ( int a, int b = 0, bool f = true, double r = 5.9)
{
...
}
В этом случае все или часть параметро по умолчанию можно упускать при
вызове функции, а вместо них автоматически будут подставлены значения
по умолчанию:
- Вызов GetSomethingUseful(3, 5, false) будет эквивалентен вызову GetSomethingUseful(3, 5, false, 5.9).
- Вызов GetSomethingUseful(3, 5) будет эквивалентен вызову GetSomethingUseful(3, 5, true, 5.9).
- Вызов GetSomethingUseful(3) будет эквивалентен вызову GetSomethingUseful(3, 0, true, 5.9).
При этом следует помнить, что если мы пропускаем какой-то параметр,
имеющий значение по умолчанию, то и все последующие параметры также
должны не указываться.
Если мы импортируем функцию из другого модуля, то такие параметры таких функций не могут иметь значения по умолчанию.
Все, что я рассказал выше, касалось передачи параметров в функцию по
значению. Чтобы все стало ясно, давайте рассмотрим небольшой пример:
void MyFirstFunction ()
{
int a = 10;
MySecondFunction ( a );
}
void MySecondFunction ( int b )
{
b = b + 1;
Print ( b );
}
В этом примере мы вызываем MySecondFunction, передавая в качестве
параметра значение переменной «a» (в нашем случае — 10). Таким образом,
при вызове MySecondFunction переменной «b» — формальному параметры
функции — будет присвоено значение 10, которое будет следующей строчкой
увеличено на единицу и выведено в лог. Однако при этом значение
переменной a в MyFirstFunction не изменится и останется равным 10.
Существует и другой способ передачи параметров в функцию — по ссылке
(используя после описания типа знак амперсенда — &). Рассмотрим
новый пример:
void MyFirstFunction ()
{
int a = 10;
MySecondFunction ( a );
}
void MySecondFunction ( int& b )
{
b = b + 1;
Print ( b );
}
В этом примере мы вызываем MySecondFunction, передавая в качестве
параметра ссылка на переменную «a». Таким образом, в функции
MySecondFunction всегда, когда будет идти обращение к переменной b,
реально будет идти обращение к переменной a. Т.е. следующей строчкой
значение переменной «a» будет увеличено на единицу и выведено в лог.
После завершения функции MySecondFunction переменная «а» будет равна 11.
В качестве параметров по ссылке можно передавать как переменные
стандартных типов (но только в пределах одного модуля), так и массивы
(как в пределах одного модуля, так и в другие модули).