Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Как это работает

Читайте также:
  1. А как вы работаете сейчас с интернет-маркетингом?
  2. В торговой точке работает 1 Промоутер
  3. Ваша группа известна во всем мире. Были ли адекватные предложения выступить за границей? Работаете ли вы в данном направлении?
  4. Внимание! Для обслуживания абонентов ОАО "МТС" в Москве работает 2 СЦ: - шоссе Энтузиастов, дом 11а, корпус 2 - ул. Леси Украинки д. 4, к. 1
  5. Глобальный маркетинг не работает
  6. ДАРМОВЩИНА, КОТОРАЯ СРАБОТАЕТ НА ВАС
  7. Если в одном и том же канале один из корреспондентов работает в АМ, а другой в FM, они будут принимать друг друга с сильными искажениями.

Рассмотрим, сначала, как реализована наша функция. Прототип ф-ии lowest() использует double& как спецификацию возвращаемого типа, который поэтому является типом ‘ссылка на double ’. Синтаксически, возвращаемое значение ссылочного типа пишется так же, как и при объявлении ссылки. Функция имеет два параметра: одномерный массив A типа double, и целочисленный параметр len, который определяет длину массива.

В теле функции в цикле for определяется элемент массива, содержащий наименьшее значение. Индекс j, элемента с наименьшим значением сначала полагается равным 0, а затем в цикле модифицируется при выполнении условия A[i] меньше A[j]. Таким образом, на выходе из цикла получаем значение индекса для искомого элемента массива. Далее следует оператор возврата return:

return A[j]; // Возвращает ссылку на наименьший элемент

Несмотря на то, что этот оператор выглядит так же, как и в случае возврата значения, он возвращает ссылку на A[j], а не значение элемента, поскольку возвращаемый тип – ссылка. Адрес элемента A[j] используется для инициализации возвращаемой ссылки. Сама ссылка создается компилятором, т.к., возвращаемый тип объявлен как ссылка.

Не надо путать возвращение &A[j] с возвращением ссылки. Если мы пишем &A[j] как возвращаемое значение, то специфицируем адрес A[j], что по смыслу является указателем. И если возвращаемый тип был указан как ссылка, то получим при компиляции сообщение об ошибке.

Функция main() - очень простая. Объявлен и проинициализирован массив array[], определяется его длина len, и для сравнения –массив выводится.

Затем, ф-ия main() дважды вызывает ф-ию lowest() с левой стороны оператора присваивания, чтобы изменить элемент массива с наименьшим значением. Ну и, наконец, мы выводим результат работы программы.

Если мы выполним программу, то увидим, что после первого вызова элемент array[2], содержащий наименьшее значение, изменится и будет равным 6.9. Аналогично, при втором вызове, array[10] станет равным 7.9. Таким образом, эффект таков, как будто переменная, указанная в операторе return,находится с левой стороны оператора присваивания.

Конечно, если нам нужно, мы иожем использовать ф-ию и с правой стороны оператора присваивания (т.е., обычным образом), или в любом другом подходящем выражении. Например, если у нас есть два массива, X и Y, с длинами lenX и lenY, соответственно, мы могли бы поменять наименьшее значение элемента в массиве X на удвоенное наименьшее значение элемента из массива Y с помощью оператора:

lowest(X, lenX) = 2.0*lowest(Y, lenY);

Замечание. Как и для указателей, для возвращения ссылок из ф-ий имеется аналогичное твердое правило:

Никогда не возвращайте из функции ссылку на локальную переменную.

На этом, пока, закончим обсуждение ссылок, но вернемся к этой теме в будущем в контексте классов и ООП.


Дата добавления: 2015-11-16; просмотров: 40 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Объявление и инициализация ссылок| Указатели на функции

mybiblioteka.su - 2015-2024 год. (0.01 сек.)