Глава 7. Указатели и ссылки__________________________________161

Связь очень проста: если в интерфейсе функции используется звездочка *:

void Foo( struct IMTS *ints); // интерфейс функции

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

Важно помнить, что здесь речь идет не о базовых типах данных, а о производных, составных типах, состоящих из более простых переменных.

Использование ссылок в аргументах

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

Терминология

Для начала условимся о значении терминов объявление (декларация) и определение. Объявление (declaration) функции предоставляет ее интерфейс, в который входят имя функции, возвращаемое значение, круглые скобки, список аргументов и точка с запятой. Синтаксически объявление выглядит следующим образом:

return_type function_name(...);

То есть

void Foo( int num); // объявление Foo

Это пример, где void — это тип возвращаемого значения, Foo — имя функции, ( и ) — пара скобок, int — тип аргумента и num — это переменная, завершается объявление точкой с запятой. Разница между объявлением функции и ее определением заключается в том, что вместо точки с запятой следует тело функции (заключенное в левую и правую фигурные скобки). То есть Foo может быть определено как

void Foo ( int num) { cout « num « endl; )

6 Зах.ЗОб