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

Вызов функции

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

имя_функции ( имя1, имя2, имя3,…, имяN );

(имя1, имя2, имя3,…, имяN) – список аргументов, состоящий из перечня имен переменных, ранее описанных и имеющих свои конкретные значения, засылаемых в функцию при ее вызове.

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

  • количество данных в списке аргументов должно быть равным количеству данных в списке параметров, записанном в заголовке функции;

  • типы соответствующих данных этих двух списков должны быть одинаковыми.

Место записи оператора вызова

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

Например:

void main ( )

{

float k = 1.25, l = -0.75;

. . . . . . . . . . . . . . . . . . . .

cout << max ( k, l);

. . . . . . . . . . . . . . . . . . . . .

}

В этом примере главная функция main ( ) вызывает функцию max ( ), ранее показанную в предыдущем примере. Оператор вызова этой функции max (k, l) записан в составе оператора вывода данных на экран cout << max (k, l). Это означает, что на экран будет выведен результат работы функции, то есть большее из двух чисел k и l. При записи оператора вызова соблюдены все требования:

  • в списке параметров представлены две переменных a и b и в списке аргументов (в операторе вызова) их две – k и l;

  • типы переменных a и b в списке параметров float, такой же тип и переменных k и l в списке аргументов оператора вызова функции.

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

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

При вызове функции всем данным, принимающим участие в работе функции, независимо от их статуса (локальные или глобальные), выделяются ячейки памяти в участке оперативной памяти компьютера, называемом стэком. Причем, эта память выделяется только на время работы функции. Для аргументов, играющих роль исходных данных, также выделяются ячейки памяти и там создаются копии их значений. Оригиналы их значений хранятся в ячейках, выделенных еще при их описании в вызывающей функции. В приведенном ранее примере, при вызове функции max(k, l), используются не оригиналы значений переменных k = 1.25 и l= - 0.75, а их копии. Копии значений могут изменяться в процессе работы функции, а оригиналы – нет. После завершения работы функции, выделяемая для нее память освобождается.

15.3.2. Функции, возвращающие результат по ссылке

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

Синтаксис заголовка функций, возвращающих результат по ссылке, имеет вид:

void имя(тип1 имя1, тип2 имя2,…, типN имяN, тип1 & имя1, тип2 & имя2,…, типN & имяN)

Здесь void – ключевое слово, означающее пусто;

тип1 имя1, тип2 имя2,…, типN имяN – тип и имя входных данных;

тип1 & имя1, тип2 & имя2,…, типN & имяN – тип и имя выходных данных.

Все данные в скобках образуют список параметров, состоящих из имен абстрактных данных (не имеющих значений).

Перед именами выходных данных ставится знак & (амперсанд). Этот знак обозначает ссылку на ту ячейку, которая выделена для переменной, помеченной этим знаком, и куда надо помещать результат.