Справочные данные по языку C++_____________________________625

в списке параметров заголовка функции могут читаться как «count является ссыл-
кой на int». В вызове такой функции достаточно указать имя переменной и она бу-
дет передана по ссылке. Реально в функцию передается не сама переменная, а ее
адрес, полученный операцией адресации (&). Тогда упоминание в теле вызываемой
функции переменной по имени ее параметра в действительности является обраще-
нием к исходной переменной в вызывающей функции и эта исходная переменная
может быть изменена непосредственно вызываемой функцией.
Например:

void square(int &);     // Прототип функции вычисления квадрата
'.-oid square (int &a)     // Заголовок функции

а *= а;              // Изменение значения параметра

!

Вызываться подобная функция может обычным способом передачей в нее име-
ни аргумента. Например:

int х1 = 2;

square(xl);

В результате подобного вызова переменная xl получит значение 4.

Предупреждение ———~——-"—————————————————————————

Поскольку ссылочные параметры упоминаются в теле вызываемой функции просто по име-
ни, программист может нечаянно принять ссылочный параметр за параметр, переданный по
значению. Это может привести к неприятным ошибкам, если исходные значения перемен-
ных изменяются вызывающей функцией.

Альтернативной формой передачи параметра по ссылке является использова-
ние указателей (см. раздел 12.7 главы 12). Тогда адрес переменной передается в
функцию не операцией адресации (&), а операцией косвенной адресации (*). В спи-
ске параметров подобной функции перед именем переменной указывается символ
«*», свидетельствуя о том, что передается не сама переменная, а указатель на нее.
В теле функции тоже перед именем параметра ставится символ операции разыме-
нования *, чтобы получить доступ через указатель к значению переменной (пояс-
нения всего этого вы можете найти в разделе 12.7 главы 12). А при вызове функ-
ции в нее в качестве аргумента должна передаваться не сама переменная, а ее ад-
рес, получаемый с помощью операции адресации &.

Приведем пример той же рассмотренной ранее функции square, но с переда-
чей параметра по ссылке с помощью указателя:

void square(int *);   // Прототип функции вычисления квадрата
void square(int *a)   // Заголовок функции

(

*а *= *а;           // Изменение значения параметра
)

Вызов подобной функции может осуществляться, например, следующим обра-


зом:

int xl = 2;

square(&xl);