Глава 11. Функции________________________________________253

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

Типы аргументов и объявления

Любой тип данных, будь он базовым или производным, может быть использован в качестве типа аргумента. Напомним: синтаксис каждого аргумента, за исключением случая списков аргументов переменной длины, выглядит так:

data_type variable_name

Например:

blood howMuch

«

Аргументы функций, называемые также параметрами, располагаются между скобками после имени функции. Тогда если blood является типом аргумента функции Draculas, возвращающей тип данных count, то объявление функции будет таким:

count Draculas(blood) ;

поскольку имя переменной в объявлении указывать не требуется. Так же, как и возвращаемые типы, аргументы могут содержать операции разыменования и получения адреса. И основания для их использования те же, что и для возвращаемых типов, но об этом чуть позже.

Каждый аргумент, следующий после первого, отделяется от предыдущего запятой — в качестве примера вспомните функцию TakesThree. Это тривиально. Гораздо важнее разобраться, что означает передача аргументов по значению или по ссылке.

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

Невозможно свести все возможные способы передачи аргументов функции к одному. Сейчас мы займемся передачей по ссылке в противовес передаче по значению (другие варианты будут разобраны в главе 17 "Конструкторы:

копирование и присваивание").

Наиболее очевидный способ заставить функцию вернуть значение — сделать это значение возвращаемым. А если функция должна вернуть несколько значений, например модифицировать несколько переменных? Можно специально для такого случая создать составной тип данных (структуру, например), и в дальнейшем модифицировать и возвращать переменную этого типа. Например: