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

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

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

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

имя_функции (имя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, а их копии. Копии значений могут изменяться в процессе работы функции, а оригиналы – нет. После завершения работы функции, выделяемая для нее память освобождается.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: