Ссылки в С++

Ссылки в С++, применениеСсылка — это основная концепция языка программирования C++. Хотя она не так надежна, как указатель, тем не менее она позволяет нам использовать себя для написания эффективных программ. Основное использование ссылочной переменной заключается в передаче параметров функциям.

Популярный метод передачи параметров «передача по ссылке» использование ссылок. Из этой статьи вы узнаете, что такое ссылка, и как ее объявить и использовать. Мы также обсудим различия между указателями и ссылками, а также передачу и возврат ссылки в/из функций.

Что такое ссылка?

Ссылка — это псевдоним или другое имя переменной. Учитывая переменную с идентификатором, мы можем предоставить другой идентификатор этой переменной, чтобы мы могли обращаться к этой переменной либо с ее исходным именем, либо с другим именем. Это «другое имя» называется ссылкой.

Предположим, что у нас есть переменная ‘i’ со значением 17. Если j является ссылкой, то представление в памяти переменной i и ссылки j будет такое как показано ниже:

Представление ссылки

Как показано на рисунке выше, переменная и ее псевдоним, т.е. ссылка, указывают на одно и то же значение.

Объявление ссылочных переменных

Ссылку можно объявить с помощью оператора ‘&’.

Объявление ссылки показано ниже:

Итак, в приведенном выше коде мы объявили целочисленную переменную со значением 10. Затем мы объявляем другую переменную refvar и присваиваем ей переменную. Обратите внимание, что при объявлении refvar мы использовали оператор & непосредственно перед именем переменной. Это указывает на то, что refvar является ссылкой на уже существующую переменную.

Мы можем ссылаться на переменную ‘a’ либо по имени переменной a, либо по ссылочному имени ‘refvar’.

Ниже приведен простой пример ссылок:

Вывод данных:

В приведенном выше коде у нас есть целочисленная переменная age. Затем мы объявляем ссылочную целочисленную переменную numYears для переменной age. У нас есть еще одна переменная salary типа double. Далее мы объявляем двойную ссылку переменной wages на переменную salary .

Затем мы печатаем переменные, сначала age, затем его ссылку, за которой следует salary и ее ссылка. Если мы проверим вывод программы, мы поймем, что переменная и ссылка на нее указывают на одно и то же значение, и, следовательно, Age и numYears, а также salary и wages имеют одинаковые значения.

Ссылки или указатели

По сравнению с указателями ссылки более безопасны и просты в использовании.

Вот некоторые различия между указателями и ссылками:

  • В отличие от указателей, ссылки не могут иметь нулевое значение. Ссылкам обязательно должно быть присвоено значение.
  • Ссылки инициализируются в момент их создания. В отличие от этого, указатели могут быть инициализированы в любой момент времени и не обязательно во время объявления.
  • Указатели можно легко переназначать значениям. Но со ссылками мы не можем этого сделать. После присвоения значения переменной, т.е. после создания псевдонима переменной, мы не можем присвоить этой ссылке другую переменную.
  • У нас нет недействительных ссылок. По определению ссылка является псевдонимом переменной и инициализируется во время самого создания. Таким образом, нет никаких шансов, что мы получим пустую ссылку и позже присвоим ей переменную с конкретным типом данных. Напротив, у нас могут быть пустые указатели.

Из-за этого ограничения, описанного выше, ссылки в C++ нельзя использовать со структурами данных, такими как связанный список. Обратите внимание, что в Java у нас нет всех этих ограничений или ограничений на ссылки.

Передача ссылок в функции

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

Но на этот раз вместо чисел, мы поменяем местами две строки.

Вывод данных:

Итак, в этой программе мы передаем строки (char*) функции подкачки. Формальные параметры — это две ссылки на переменную типа char*. Отметим, что когда два значения меняются местами, их изменение отражается в вызывающей функции, поскольку мы используем ссылки/псевдонимы для параметров.

Возврат ссылок

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

Давайте рассмотрим пример возврата ссылки из функции:

Вывод данных:

Как видно из приведенного выше кода, мы определяем функцию setValues, которая возвращает ссылку и параметр, который является целым числом. Внутри функции мы просто возвращаем ссылку на массив в позицию I в C++.

В основной функции мы печатаем значения массива. Затем с помощью функции setValues ​​мы меняем значения двух элементов в массиве. Снова печатаем значение массива.

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

Итог

Главное, что вы должны запомнить, что в основном ссылки используются для передачи параметров функциям. А в следующей статье вы узнаете все о лямбда-выражениях в C++.

С Уважением, МониторБанк

Добавить комментарий