Разница между справкой 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 и Pointer | C ++ 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 с помощью инфографики и сравнительной таблицы. Вы также можете взглянуть на следующие статьи, чтобы узнать больше -
- Различия между Python и C ++
- Производительность C против C ++ - лучшие отличия
- MongoDB против Кассандры
- Mobx против Redux
- Вектор C ++ против массива: основные отличия
- MongoDB против DynamoDB: функции
- MongoDB против SQL: каковы функции
- C против C #: функции