Разница между справкой C ++ и указателем

Хотя ссылка C ++ на указатель кажется похожей, между C ++ Reference и Pointer есть существенная разница. Ссылочная переменная может быть названа как другое имя для существующей переменной. После инициализации этой переменной имя переменной можно использовать для ссылки на другую переменную. Указатели, с другой стороны, являются переменными, которые хранят адрес переменной. Как и любая переменная, они сначала объявляются, а затем в них может храниться адрес любой переменной. Давайте посмотрим на различия между C ++ Reference и Pointer подробно, как показано ниже.

Сравнение лицом к лицу между C ++ Reference и Pointer (Инфографика)

Ниже приводится топ-7 различий между C ++ Reference и Pointer.

Ключевые различия между C ++ Reference и Pointer

Оба C ++ Reference против Pointer являются популярным выбором на рынке; Давайте обсудим некоторые основные различия между C ++ и Pointer:

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

Справочник по C ++ и сравнительная таблица указателей

Основное сравнение между C ++ Reference и Pointer обсуждается ниже:

Основа сравнения между C ++ Reference и PointerC ++ ReferenceУказатель
переменныеСсылка может быть названа как псевдоним существующей переменной. Основное использование этой переменной - это параметр, который работает как переход по ссылке. Это передается функции. Функция, которой это передается, работает с исходной переменной, а не с копией при передаче по значению. Изменения, сделанные внутри функции, также будут отражены снаружи.Переменные-указатели - это переменные, которые хранят адрес. В отличие от обычных переменных, таких как int, double и char, в нем хранятся адреса памяти. Для облегчения программирования возникает необходимость в этой переменной. Это переменная, которая может хранить значение определенного типа.
декларацияОбъявление ссылочной переменной C ++ выполняется путем добавления символа '&' перед переменной. Когда оно используется с выражением, оно обозначает, что оно работает как адрес оператора. Он используется для предоставления другого имени существующей переменной.
Синтаксис:
тип & новое имя = существующее имя ;
// или
тип & новое имя = существующее имя ;
// или
тип & новое имя = существующее имя ;
Например:
/ * Проверка справочной декларации и инициализации * /
#включают
использование пространства имен std;
int main () (
имя строки = «Прия»; // Объявляем строковую переменную с именем name
строка & refName = имя; // Объявляем ссылку (псевдоним) на имя переменной
// оба refName и name относятся к одному и тому же значению «Priya»
cout << name << endl; // выводит значение переменной «Прия»
cout << refName << endl; // выводит значение ссылки «Прия»
Теперь измените значение имени
refName = «Каришма»; // Повторно назначаем новое значение refName
cout << refName << endl;
cout << name << endl; // Значение номера также меняется «Каришма»
name = «Snehal»; // Повторно назначаем новое значение имени
cout << namer << endl;
cout << refName << endl; // Значение refName также меняет «Snehal»
)
Это означает, что значения ссылочной переменной могут быть изменены в оригинале и копии переменной.
Прежде чем использовать указатель в любом месте программы, он должен быть объявлен заранее. Чтобы объявить указатель и дать системе знать, что это указатель, переменная имеет префикс «*». Указатель сопровождается типом данных, который может быть целым или двойным и т. Д.
Синтаксис:
тип * pntr ; // Объявляем переменную-указатель pntr как указатель типа
// или
тип * pntr ;
// или
тип * pntr ;
Например:
int * newPtr; // Объявляем переменную-указатель с именем newPtr, указывающую на int (указатель на int)
Этот указатель будет содержать адрес. Этот адрес содержит значение int.
double * newdPtr; // Объявляем двойной указатель
Знак * указывает, что указатель объявляется и не действует как оператор.
ПерераспределениеСсылочная переменная не может быть переназначена.
Пример:
int x = 5;
int y = 6;
int & r = x;
Указатель можно переназначить, и это свойство пригодится, когда разработчик реализует структуры данных, такие как связанные списки, деревья и т. Д.
Пример:
int x = 5;
int y = 6;
int * p;
р = & х;
p = & y;
Адрес памятиСсылочная переменная имеет тот же адрес, что и исходная переменная. Эти ссылки могут быть переданы различным функциям, они могут быть сохранены в разных классах и т. Д. Ссылка никогда не указывает на новую переменную, пока старая не будет удалена или не выйдет из области видимости.Указатель имеет собственный адрес памяти и сохраняет его в стеке. Указатель является независимой переменной и может иметь новые значения, назначенные самому себе.
Нулевое значениеСсылка не может иметь назначенное нулевое значение.Указатель может иметь нулевое значение, назначенное напрямую.
аргументыСсылочная переменная может ссылаться на обход по значению. Здесь аргументы передаются по значению в функции. Клон создается и отправляется в функцию с его помощью. Изменения, внесенные в копию, не влияют на исходную переменную.Когда мы хотим изменить оригинальную копию, это можно сделать, передав указатель объекта в функцию. Это известно как передача по ссылке.
Когда использоватьСсылки косвенно обращаются к переменной. Рассмотрим следующий пример:
конец дня
(
Воскресение понедельник, …
);
Если мы определим переменную
день х;
И мы хотим перегрузить оператор в оператор, тогда мы можем написать так:
день и оператор ++ (день и день)
(
д = (день) (д + 1);
возврат г;
)
Вкратце, это можно использовать в параметрах функций и ссылочных типах.
Использование указателей без предварительной декларации.
оператор day * ++ (день * d);
Это может быть использовано для реализации структур данных и арифметических операций с указателями.

Заключение - C ++ Reference vs Pointer

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

Рекомендуемая статья

Это было руководство к основным различиям между C ++ Reference и Pointer. Здесь мы также обсудим различия между C ++ Reference и Pointer Key с помощью инфографики и сравнительной таблицы. Вы также можете взглянуть на следующие статьи, чтобы узнать больше -

  1. Различия между Python и C ++
  2. Производительность C против C ++ - лучшие отличия
  3. MongoDB против Кассандры
  4. Mobx против Redux
  5. Вектор C ++ против массива: основные отличия
  6. MongoDB против DynamoDB: функции
  7. MongoDB против SQL: каковы функции
  8. C против C #: функции