Передача параметра по ссылке
Передача параметра по ссылке — это способ вызова подпрограммы, при котором параметр связывается с исходной переменной. Поэтому подпрограмма может изменить значение этой переменной, и изменение сохранится после её завершения.
Как это работает
Вызов подпрограммы выполняется с помощью аргумента, а описание подпрограммы содержит параметр. При передаче по ссылке параметр и аргумент обозначают одну и ту же область памяти. Поэтому присваивание параметру внутри подпрограммы равносильно присваиванию исходной переменной.
Например, если подпрограмма получает переменную \(x\) по ссылке и выполняет присваивание \(x := x + 1\), после вызова значение переменной увеличится на единицу. В некоторых языках специальный синтаксис указывает, что параметр передаётся по ссылке; в других языках это определяется правилами языка или типом объекта.
В псевдокоде процедура Увеличить(var a) получает переменную по ссылке и выполняет a := a + 1. После вызова Увеличить(x) значение x изменится: было 7, станет 8.
При передаче параметра по значению подпрограмма получает копию. Изменение параметра не изменяет исходную переменную. При передаче по ссылке копирования значения для изменения исходной переменной не требуется.
Переменная x равна 5. Подпрограмма получает x по ссылке и присваивает параметру значение 12. Чему равно x после вызова?
Передача по ссылке удобна, когда подпрограмма должна изменить несколько исходных переменных или вернуть результат через параметры. Но такой способ требует осторожности: изменение может быть неочевидным в месте вызова. В задачах на анализ подпрограмм важно отслеживать, какие параметры передаются по ссылке и какие присваивания выполняются внутри.
Главное
- Параметр по ссылке связан с исходной переменной, а не с её копией.
- Изменение такого параметра изменяет аргумент после завершения подпрограммы.
- Передача по ссылке отличается от передачи по значению возможностью изменять исходные данные.