Передача параметров в функции по значению
Рассмотрим пример, когда функция пытается изменить значение своего параметра.
void MyFun(int a)
{
a=100;
}
void main()
{
int a=10;
MyFun(a);
printf("a=%d", a); // Будет напечатано a=10
}
В данном примере, несмотря на то, что функция меняет значение параметра, на печать будет выведено старое значение фактического параметра – переменной a, т.е. изменение, которое произвела функция с параметром, после выхода из функции не сохраняется. Это происходит потому, что при передаче параметров в функцию создаются копии параметров в стеке (также все локальные переменные функции размещаются в стеке), и функция работает не с исходной переменной, а с копией этой переменной в стеке. При выходе из функции место в стеке, где размещены параметры функции и ее локальные переменные, освобождается и все изменения пропадают. Данный процесс демонстрирует рисунок, представленный ниже.
Оперативная память |
….. ….. ….. Стек |
Переменная a=10 |
Копия a=100 |
Примечание. Стек(англ. stack — стопка) — структура данных, в которой доступ к элементам организован по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»). В оперативной памяти выделяется специальный сегмент стека для временного хранения данных, который работает по такому же принципу.
На рисунке показано, что исходная переменная a может размещаться как в стеке – в данном примере, так оно и есть, так как переменная a локальная переменная функции main, так и за пределами стека, если бы a была бы глобальной переменной, в данном случае это не имеет значение, так как все равно функция работает с копией a.
Такой механизм передачи параметров в функцию называется передача параметров по значению (в стек копируется значение параметра).
Дата добавления: 2015-08-14; просмотров: 522;