Глава 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 Зах.ЗОб