Передача по ссылке позволяет функции изменять переменную без создания копии. Мы должны объявить ссылочные переменные. Расположение в памяти переданной переменной и параметра совпадает. Следовательно, любое изменение параметра также отражается в переменной внутри его родительской функции. В этой статье основное внимание уделяется обсуждению передачи переменных по ссылке в C++.
Что такое пропуск по ссылке?
Когда переменная передается как ссылка на функцию, адрес переменной сохраняется в переменной-указателе внутри функции. Следовательно, переменная внутри функции является псевдонимом переданной переменной. Следовательно, любые операции, выполняемые над переменной внутри функции, также будут отражены в вызывающей функции.
- Эта способность отражать изменения может возвращать более одного значения функцией.
- Кроме того, функция void может технически возвращать значения, используя этот метод.
Оператор & (адрес) обозначает значения, передаваемые по ссылке в функции. Ниже приведена программа C++ для реализации передачи по ссылке:
С++
// C++ program to implement
// pass-by-reference
#include <iostream>
using
namespace
std;
void
f(
int
& x)
{
x--;
}
// Driver code
int
main()
{
int
a = 5;
cout << a << endl;
f(a);
cout << a << endl;
}
Выход
5 4
Объяснение:
- Во-первых, функция определяется с возвращаемым типом данных void и принимает значение по ссылке (что обозначается знаком адреса &в формальных параметрах).
- Функция уменьшает значение своего формального параметра на 1.
- После чего внутри функции main целочисленная переменная с именем aинициализируется значением 5.
- Значение «а» выводится на консоль. Вызывается функция f(), и переменная передается в качестве аргумента.
- Внутри функции значение переменной уменьшается на 1.
- По возвращении из функции снова отображается значение переменной, которое оказалось на 1 меньше исходного значения.
Следовательно, изменения в переменной, переданной по ссылке в функцию, отражаются в вызывающей функции.
Функция подкачки с использованием Pass-By-Reference
Функция swap меняет местами значения двух переменных, которые она получает в качестве аргументов. Ниже приведена программа C++ для замены значений двух переменных с использованием передачи по ссылке.
С++
// C++ program to swap the values
// of two variables using
// pass-by-reference
#include <iostream>
// Prototype of the function
void
swap(
int
&,
int
&);
// Driver code
int
main()
{
int
x, y;
// Inputting two variables
printf
(
"Enter the value of x and y\n"
);
scanf
(
"%d%d"
, &x, &y);
// Displaying their values before swapping
printf
(
"Before Swapping\nx = %d\ny = %d\n"
,
x, y);
// Calling the function & sending variable
// values as argument
swap(x, y);
// Displaying their values after swapping
printf
(
"After Swapping\nx = %d\ny = %d\n"
,
x, y);
return
0;
}
// Function uses pass by reference method
// to swap passed variable values
void
swap(
int
&a,
int
&b)
{
int
temp;
temp = b;
b = a;
a = temp;
}
Выход:
Объяснение:
- Сначала определяется прототип функции (необязательно, если функция определена перед основной функцией).
- Внутри основной функции значения двух переменных принимаются пользователем в качестве входных данных.
- Значения перед вызовом функции подкачки выводятся на консоль.
- После чего значения передаются в качестве аргумента функции подкачки.
- Функция swap использует вызов по ссылке и содержит код для замены двух переменных.
- По завершению функции значение двух переменных отображается в основной функции (после вызова swap).
- Переставленные значения отображаются на экране.
Передача по ссылке с указателями
Также можно передать адрес переменной из вызывающей функции и использовать его как указатель внутри вызываемой функции. Это позволяет немного более явно изменять значения переменных в функции.
Ниже приведена программа C++ для реализации передачи по ссылке с указателями:
С++
// C++ program to implement
// pass-by-reference with
// pointers
#include <iostream>
using
namespace
std;
void
f(
int
*x)
{
*x = *x - 1;
}
// Driver code
int
main()
{
int
a = 5;
cout << a << endl;
f(&a);
cout << a << endl;
}
Выход
5
4
Объяснение:
- Во-первых, функция определяется с возвращаемым типом данных void и принимает значение в виде указателей (что обозначается знаком звездочки* в формальных параметрах).
- Функция уменьшает значение своего формального параметра на 1.
- После чего внутри основной функции целочисленная переменная с именем ’a’ инициализируется значением 5.
- Затем отображается это значение. Вызывается функция, и в качестве аргумента передается адрес переменной.
- Внутри функции значение переменной указателя уменьшается на 1.
- По возвращении из функции снова отображается значение переменной, которое оказалось на 1 меньше исходного значения.