Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1. Навроцкий А.А. Основы алгоритмизации и программирования в среде Visual C++.pdf
Скачиваний:
54
Добавлен:
26.03.2016
Размер:
3.6 Mб
Скачать

8.2. Передача параметров

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

8.2.1.Передача параметров по значению

Вфункции создаются временные переменные, в которые передаются значения из вызывающей функции. Например:

int fun1(double, int, char);

// Прототип функции

 

 

 

 

 

 

 

int fun1(double a, int b, char c) // Заголовок функции

{

 

 

 

 

 

Р

Тело_функции

 

 

 

 

И

}

 

 

 

 

 

 

 

У

 

 

 

 

 

int s = fun1(d, 8, chr); // Вызов функции

 

 

Г

 

 

В момент обращения к функции в

 

 

 

 

 

создаются временные переменные

 

 

Б

 

 

 

 

памяти

 

 

 

d, 5, chr. После

с именами a, b, c. В созданные переменные копируются значения:

этого связь между передаваемыми и временными переменными разрывается.

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

 

 

В функцию передаются адр са п ременных из основной программы.

к

 

 

 

 

 

Ссылочный параметр – псевдонимесоотв тствующего аргумента. Для получения адреса используется операция «взять адрес». Например:

 

void fun2(double &, int &); // Прототип функции

 

 

 

 

т

 

 

 

 

 

 

void fun2(double &a, int& b) // Заголовок функции

 

{

 

 

о

 

 

и

 

 

 

 

 

 

Те о функции

 

 

л}

 

 

 

б

 

 

 

 

 

 

 

fun2(d, r); // Вызов функции

и

 

 

 

 

Б

 

 

 

 

 

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

8.2.3. Передача параметров по указателю

При вызове функции в качестве аргумента передается не сама переменная, а ее адрес. Например:

47

Тело_функции

void fun3(double *, int *); // Прототип функции

void fun3(double *a, int* b) // Заголовок функции

{

}

fun3(&f,&k); // Вызов функции

 

При работе с формальными параметрами внутри функции необхо-

 

 

димо использовать операцию разадресации, например:

Р

 

 

s = (*a + *b) / 2;

 

 

 

И

 

 

 

 

 

 

 

 

8.2.4. Параметры со значениями по умолчанию

 

 

чение по умолчанию, которое передается в функцию в случае, если при вызове

соответствующий параметр не задан. Так компилятор присваивает имею-

щиеся значения последовательно слева н пр во, то аргументы, имеющие за-

При объявлении функции для некоторых аргументов можно задавать зна-

 

У

Г

Б

 

данное по умолчанию значение, должны р спол гаться правее аргументов, не

имеющих такого значения. Например:

 

как

void fun4(double, int b = 3,

double h = 0.1); // Прототип функции

 

 

 

 

к

 

 

 

 

 

 

 

void fun4(double a, int b, double h) // Заголовок функции

{

 

 

 

е

 

 

 

 

 

 

 

 

 

Тело функции

 

 

 

}

 

 

т

 

 

 

 

 

о

 

 

 

 

При вызове

 

 

 

 

 

fun4(d);и// Вызов функции

переменной a передается указанное при вызове значение d, а остальным, т. к. они

л

h = 0.1).

отсутствуют в списке, присваиваются значения по умолчанию (b = 3,

бвызове

 

БПриun4(d,r)

переменной a будет передано значение d, переменной b – значение r, а переменной h значение по умолчанию h = 0.1.

При вызове un4(d,r,f)

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

48

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

8.2.5. Передача массивов в функции

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

void funm1(int []); // Прототип функции

 

 

Р

}

// Заголовок функции

void funm1(int b[])

 

{

 

 

И

Тело_функции

 

 

 

 

 

 

Г

 

funm1(a); // Вызов функции

 

Б

 

С++ передает имя массива по ссылке, т. е. при измененииУэлементов мас-

сива в функции меняются элементы соответствующего массива в вызывающей

процедуре.

 

 

 

 

 

а

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

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

таются пустыми,

а для других размерностей должен константой указываться

 

 

 

 

 

е

 

размер. Например, передача двум рного массива размером 3x3 организуется

следующим образом:

 

т

к

 

 

 

void funm2(int [][3]); // Про отип функции

 

 

о

 

 

 

 

 

 

 

 

 

 

void funm2(int b[][3])

// Заголовок функции

}

 

и

 

 

 

 

{

л

 

 

 

 

 

Тело_функц

 

 

 

 

 

 

б

 

 

 

 

 

 

 

 

 

 

 

 

Б

funm2(a); // Вызов функции

8.2.6. Передача переменного числа параметров

иФормат объявления функции с переменным числом параметров:

тип возвращаемого_значения имя_функции (список_параметров, )

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

Для работы с параметрами определен тип списка va_list и три макроса: void va_start(va_list указатель, имя_послед. _обязат._аргумента)

начинает работу со списком. Устанавливает указатель на первый необязательный аргумент.

49