764 Часть II. Программирование на C++

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

Для обращения к объекту, передаваемому по ссылке (т. е. при помощи операции &), не нужен никакой специальный синтаксис. Чтение или запись значения такого объекта осуществляется таким же точно образом, что и для объекта, передаваемого по значению. То есть для того, чтобы в функции Setvalue изменить значение vai, вполне подходит обычный синтаксис:

void Setvalue( int Svar) { val = 10; }

Специально обращаем на это ваше внимание, поскольку при передаче указателей синтаксис несколько отличается от приведенного.

Если передаваемый аргумент имеет составной тип, то доступ к отдельным его элементам осуществляется через операцию точка (детали смотрите в предыдущем разделе).

Аргументы-указатели. Указатели в списке аргументов располагаются в том же самом месте, между типом данных и именем переменной. На рис. 7.2 показан общий формат объявления функции. Разница между объявлением и определением заключается в том, что в определении между левой и правой скобками { } помещается тело функции.

// Объявление функции

h01641.jpg

Рис. 7.2. Общий синтаксис объявления функции. Характерно отсутствие скобок {} (содержащих тело функции) и наличие точки с запятой в конце объявления. Типы как возвращаемого значения, так и аргументов (параметров) могут быть и совсем простыми, и составными

Обнаружив операцию звездочка в списке аргументов, компилятор понимает, что при вызове функции соответствующий аргумент должен быть указателем. Это влияет на синтаксис обращения к нему в теле функции. Хотя передавать указатели не противопоказано, в C++ это употребляется реже, чем в С. Обычно при передаче через указатель используется операция 'получения адреса, потому что для доступа к аргументу-указателю нужен другой синтаксис.

Вот функция Setvalue из предыдущего примера, использующая вместо ссылочных аргументов указатели: