Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмизация.docx
Скачиваний:
11
Добавлен:
21.11.2019
Размер:
59 Кб
Скачать
☆

63. Способы передачи параметров. Передача по ссылке

Для реализации передачи по ссылке передименем параметра в заголовке функции должен быть написан ‘&’.

void Function(char &Ch);

В этом случае не происходит копирования значения аргумента в локальную, временную переменную в процедуре. Процедура реально работает не с параметром, а со ссылкой – указателем на место хранения аргумента в памяти. Любые изменения параметра Ch в процедуре, в действительности относятся не к этомупараметру, а к тому аргументу, который был передан при вызове программы.

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

64. Параметры ссылки

<Тип ссылки>&<имя ссылки>;

Тип ссылки определяется спецификацией типа, за которой следует операция &

Примеры

1. int A = 5;

2. int& rA = A;

3. extern int& rB;

4. int& foo ();

5. void bar (int& rP);

65. Способы передачи параметров

Параметры (аргументы) функции, указываемые в списке при определении функции, называются формальными. Параметры, указываемые при вызове функции, называются фактическими.

Способы передачи:

· по значению [в стек заносятся копии значений аргументов; функция работает с копиями]

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

· по адресу (ссылке) [в стек заносятся копии адресов аргументов и функция осуществляет доступ к ячейкам памяти по этим адресам. Могут изменяться исходные значения аргументов]

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

66. Многомерные массивы как параметры

Если в качестве параметра функции указан массив, то передается указатель на его первый элемент. Это означает, что фактический параметр типа T[] преобразуется к типу T*, и затем передается. Поэтому присваивание элементу формального параметра-массива изменяет этот элемент. Массивы отличаются от других типов тем, что они не передаются и не могут передаваться по значению. В вызываемой функции размер передаваемого массива неизвестен. Его нужно передавать отдельно.

Когда параметром является двумерный массив, его вторая размерность обязательно указывается в объявлении функции

float a[ ][4].

Объявление параметра как float a[ ][ ] недопустимо.

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