Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Передача параметров по ссылкеСодержание книги Поиск на нашем сайте В языке С++ ссылка определена как другое имя уже существующей переменной. При определении ссылки оперативная память не выделяется Инициализатор являющийся обязательным атрибутом определения ссылки, представляет собой имя переменной того же типа, имеющей место в памяти. Ссылка становится синонимом этой переменной.
type & имя ссылки = имя переменной; Основные достоинства ссылок проявляются при работе с функциями. Если определить ссылку type&a и не инициализировать ее, то это равносильно созданию объекта, который имеет имя, но не связан ни с каким участком памяти. Это является ошибкой. Однако такое определение допускается в спецификациях формальных параметров функций. Если в качестве формального параметра функции была определена неинициализированная ссылка - некоторая абстрактная переменная, которая имеет имя, но не имеет адреса, в качестве фактического параметра при вызове функции следует использовать имя переменной из вызывающей программы того же типа, что и ссылка. Эта переменная является l-значением и она инициализирует ссылку, т. е. связывает ссылку со своим участком памяти. Таким образом, ссылка обеспечивает доступ из функции непосредственно к внешнему участку памяти той переменной, которая при вызове функции будет использоваться в качестве фактического параметра. Все изменения, происходящие в функции со ссылкой, будут происходить непосредственно с переменной, являющейся фактическим параметром. Это наиболее перспективный метод передачи параметров, так как в этом случае вообще не происходит копирование фактического параметра в стек, будь то значение или адрес, функция непосредственно оперирует с внешними по отношению к ней переменными, используемыми в качестве фактических параметров. Пример передачи параметров по ссылке: ... void RRR (int & a, int &b, int & c) { a += 100; b+= 100; c+= 100; cout << a <<b <<c; } Void main () { int a1=1, b1 =2, c1=3; cout << a1 << b1 <<c1; RRR(a1, b1, c1); cout << a1 <<b1 << c1; } Результат: 1 2 3 // переменные до вызова функции 101 102 103 // изменения параметров в функции 101 102 103 // функция изменила фактические параметры
На рисунке 3 показано, как функция непосредственно обрабатывает внешние по отношению к ней переменные. При этом в функции не выделяется память под формальные параметры, формальный параметр – это абстракция, просто имя, которое при передаче фактического параметра связывается с внешним по отношению к функции участком памяти.
Стек
1 2 3 - знач. переменных до вызова функции
A b c - ссылки
Рисунок 3 – Схема обработки данных функцией при передаче параметров по ссылке
Фактическим параметром может быть также имя другой ссылки, инициированной в вызывающей функции.
|
|||||
|
Последнее изменение этой страницы: 2017-02-19; просмотров: 333; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.005 с.) |