Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Ссылка в качестве возвращаемого значения



Возвращаемое функцией значение также может быть объявлено ссылкой. Это позволяет использовать функцию в левой части присваивания. Рассмотрите такой пример:

////////////////////////////////////////////////////////#include <stdio.h>#include <assert.h>const int arrSize = 8;int &refItem(int indx) // Возвращает ссылку на элемент iArray[indx]{ static int iArray[arrSize]; // Проверка диапазона: // Tests a condition and possibly aborts. assert is a macro that expands // to an if statement; if test evaluates to zero, the assert macro calls // the _assert function and aborts the program assert(indx >= 0 && indx< arrSize); return iArray[indx];}int main(){ for (int i =0; i<arrSize; i++) refItem(i) = 1 << i; // Присваивает значение элементу iArray[i]. for (int i=0; i<arrSize; i++) printf("iArray[%02d] = %4d\n”, i, refItem(i)); return 0;}

Вывод:

iArray[00] = 1iArray[01] = 2iArray[02] = 4iArray[03] = 8iArray[04] = 16iArray[05] = 32iArray[06] = 64iArray[07] = 128

В первом из операторов for функция refltem() вызывается в левой части присваивания. Во втором for она возвращает значение, которое передается функции printf (). Обратите внимание, что, во-первых, массив iArray[] объявлен как статический локальный в refltem(), благодаря чему непосредственное обращение к нему вне этой функции невозможно. Во-вторых, refltem() попутно проверяет допустимость переданного ей индекса.

Пример 2. Функция удвоения:

#include <stdio.h>void mul2(int a, int &b);int main(int argc, char* argv[]){ int a=2, b=3; printf("1. a=%d b=%d\n", a, b); //2 3 mul2(a, b); printf("3. a=%d b=%d\n", a, b); //2 6 getchar(); return 0;}void mul2(int a, int &b) { a*=2; b*=2; printf("2. a=%d b=%d\n", a, b); //4 6}




Дата публикования: 2015-01-13; Прочитано: 264 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...