Читайте также:
|
|
Рассмотрим, сначала, как реализована наша функция. Прототип ф-ии 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 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Объявление и инициализация ссылок | | | Указатели на функции |