Изменение значений параметров

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

Вызов функции имеет следующий формат:

<имя_функции>(список_аргументов)

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

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

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

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

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

Рис. 1. C++ размещает копии значений параметров во временном участке

памяти, называемом стеком

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

Рис. 2. Передача параметров по адресу.

Пример функции, в которой меняются местами значения аргументов x и y:

void zam (int *x, int * y)

{

int t;

t = *x;

*x = y; *y = t;

}

Участок программы с обращением к данной функции:

void zam (int*, int*);

void main (void)

{

int a=2, b=3; …

cout<<" a = "<< a << " b = "<< b;

zam (&a, &b);

cout<<" a = "<< a << " b = "<< b;

}

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

a = 2, b=3

a = 3, b=2


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



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