Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по информатике.doc
Скачиваний:
118
Добавлен:
02.05.2014
Размер:
1.53 Mб
Скачать

Передача параметров по ссылке

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

Для того чтобы функция могла возвращать модифицированное значение своего параметра, при вызове такой функции должен использоваться способ, называемый передача параметра по ссылке. Различие между передачей параметра по значению и по ссылке заключается в том, что в первом случае функция получает копию значения параметра, а во втором - адрес значения переменной. Таким образом, при получении параметра по ссылке функция может производить изменения значения, сохраненного по данному адресу, и эти изменения остаются в силе и после завершения функции. Для организации передачи параметров функции по ссылке в программе должны использоваться указатели. Подробно этот тип переменных обсуждается в разделе "Массивы, указатели и структуры". Здесь же будем рассматривать указатель просто как адрес памяти. Для присваивания указателю адреса переменной используется операция получения адреса (&). Для доступа к значению, расположенному по месту памяти, задаваемому указателем, применяется операция "звездочка" (*).

intx;

int&y=x;

Идентификатор y назначает другое, альтернативное имя ячейке, названной x. Если прибавить к значению переменной x некоторое число, то оно будет прибавлено и к переменной y.

#include <iostream.h>

#include <conio.h>

void summa(int &number1, int &number2)

{

number1++;

number2++;

}

void main()

{

int a=10;

int b=15;

cout<<"Before upd "<<a<<" "<<b;

summa(a,b);

cout<<"\nAfter upd "<<a<<" "<<b;

getch();

}

Результат

Before upd 10 15

After upd 11 16

Так как number1 и a – это одна и та же ячейка, то изменение number1 автоматически приведет к изменению переменной a (аналогично number2 и b).

Значения параметров по умолчанию

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

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

void some_function(int size=12, float cost=19.95) //--->Значения по умолчанию

{    // Операторы функции }

Следующая программа присваивает значения по умолчанию параметрам a, b и c внутри функции show_parameters. Затем программа четыре раза вызывает эту функцию, сначала не указывая параметров вообще, затем указывая значение только для а, потом значения для а и b и, наконец, указывая значения для всех трех параметров:

#include <iostream.h>

void show__parameters (int a=1, int b=2, int c=3)

{    cout << "a" << a << " b " << b << " с " << с << endl; }

void main(void)

{    show_parameters();    show_parameters(1001);    show_parameters(1001, 2002);    show_parameters(1001, 2002, 3003); }

Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод:

С:\> DEFAULTS<ENTER>

а 1 b2 с 3

а 1001 b2 с 3

а 1001 b2002 с 3

а 1001 b2002 с 3003

Как видите, если необходимо, функция использует значения параметров по умолчанию.

Правила для пропуска значений параметров

Если программа опускает значения параметров при вызове функции, функция использует значения по умолчанию. Если программа опускает определенный параметр для функции, обеспечивающей значения по умолчанию, то следует опустить и все последующие параметры. Другими словами, вы не можете опускать средний параметр. В случае предыдущей программы, если требовалось опустить значение параметра b в show_parameters, программа также должна была опустить значение параметра с. Вы не можете указать значение для а и с, опуская значение b.

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

int my_function(void);

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