Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
s__ekzamen.docx
Скачиваний:
7
Добавлен:
18.12.2018
Размер:
113.34 Кб
Скачать

24. Виды передачи параметров в функцию.

В С++ передача параметров осуществляется двумя способами: по значению и по ссылке. Это определяется видом объявления параметра в заголовке функции .

При передаче по значению объявление параметра похоже на объявление переменной:

тип имя

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

параметр = выражение

Выражение вычисляется; если тип полученного значения не соответствует типу параметра , то выполняется (если это возможно) преобразование типов, и значение присваивается параметру . В частности, если в качестве аргумента задана константа или переменная, совпадающая по типу с параметром , то значение просто копируется в параметр . Копирование требует времени, поэтому способ передачи параметров по значению обычно применяется для данных встроенных типов, время копирования которых мало.

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

При передаче по ссылке объявление параметра представляет собой объявление ссылки без инициализации:

тип &имя

Параметр-ссылка локальна в функции : ни в заголовке, ни в ее теле не должно быть объявлено других параметров и переменных с таким же именем. Инициализация параметра-ссылки выполняется во время вызова функции . При этом способе передачи параметров в качестве аргумента может задаваться только L-значение.

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

Этот способ передачи параметра используется, если функция должна возвратить не один результат, а несколько. Например, передача параметров по ссылке может использоваться в функции обмена значений двух переменных:

void swap( int &a, int &b ) // определение функции обмена

{ int t = a; a = b; b = t; }// ...

int x = 5, y = 6;

swap( x, y ); // вызов функции обмена

Пример передачи параметров :

#include <iostream>

using namespace std;

void f(int i, int* j, int& k);

int main()

{int i = 1, j = 2, k = 3;

cout <<"i j k\n";

cout << i <<' ' << j <<' '<< k <<'\n'; f(i, &j, k);

cout << i <<' '<< j <<' '<< k;}

void f(int i, int* j, int& k)

{ i++; (*j)++; k++; }

Результат работы программы:

i j k

1 2 3

1 3 4

Первый параметр (i) передается по значению. Его изменение в функции не влияет на исходное значение. Второй параметр (j) передается по адресу с помощью указателя, при этом для передачи в функцию адреса фактического параметра используется операция взятия адреса, а для получения его значения в функции требуется операция разыменования. Третий параметр (k) передается по адресу с помощью ссылки.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]