Информатика и технология программирования


Ссылка (неявный указатель) - часть 3




-если же используется сам результат (например, сохраняется путем присваивания), то производится косвенное обращение по неявному указателю.

.


int &#38COPY(int *pa) int *COPY(int *pa)
//---------------------------------------------------------


// Си++ Эквивалент в "классическом Си"


//---------------------------------------------------------


{ {
return(*pa); return(pa);
} }
... ...
int a,b = 5,*pc; int a,b = 5,*pc;
//


//-- Косвенное обращение по неявному указателю - результату


a = COPY(&#38b); a = *COPY(&#38b);
//


//-- Передача неявного указателя без изменения ------------


pc = &#38COPY(&#38b); pc = COPY(&#38b);
pc = &#38COPY(&#38COPY(&#38b)); pc = COPY(COPY(&#38b));

Обратите внимание, что тип результата в операторе return(*pa) -не указатель, а указуемый тип. То же самое и в выражении, где находится вызов функции COPY(&#38b), то есть по синтаксису функция COPY возвращает не тип-указатель, а тип указуемой переменной.

Заменив в формальном параметре указатель на ссылку, получим наиболее распространенный способ "прозрачной" передачи ссылки через функцию. Он позволяет организовать цепочку вызовов функций, передающих неявный указатель с выхода функции на вход следующей:

.


int &#38INC(int &#38a ) int *INC(int *pa)
//---------------------------------------------------------


Си++ Эквивалент в "классическом Си"
//---------------------------------------------------------


{ {
a++; (*pa)++;
return(a); return(pa);
} }
... ...
int а,b = 5; int а,b = 5;
а = INC( INC( INC(b))); a = *INC( INC( INC(&#38b)));

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

Если рассматривать функцию как конвейер, передающий некоторую переменную со входа функции на выход, то имеется три способа такой передачи:




Начало  Назад  Вперед



Книжный магазин