Різниця між посиланням C ++ та покажчиком

Хоча C ++ посилання на вказівник схоже, є значна різниця між обома C ++ посиланням та покажчиком. Довідкова змінна може бути сказана як інша назва існуючої змінної. Після ініціалізації цієї змінної ім'я змінної можна використовувати для позначення іншої змінної. З іншого боку, покажчики - це змінні, які зберігають адресу змінної. Як і будь-яка змінна, вони оголошуються спочатку, а потім адреса будь-якої змінної може зберігатися в них. Давайте докладніше розглянемо відмінності між C ++ Reference та Pointer як нижче.

Порівняння головою до голови (C ++ Reference - Pointer) (Інфографіка)

Нижче наведено найкращі 7 різниць між C ++ Reference та Pointer

Основні відмінності між C ++ Reference та Pointer

І C ++ Reference, і Pointer - популярний вибір на ринку; обговоримо деякі основні відмінності між C ++ Reference та Pointer:

Основна відмінність C ++ Reference від Pointer полягає в тому, що одна посилається на іншу змінну, а остання зберігає адресу змінної. Посилання не вносять змін до вихідної змінної, тоді як, якщо вказівник змінено, це впливає на оригінальну змінну. Посилання повинно бути ініціалізовано при оголошенні, поки не потрібно ініціалізувати покажчик, як тільки він оголошений. Масив покажчиків можна створити, тоді як масив посилань неможливо створити. Нульове значення не може бути призначене посиланням, але воно може бути призначене покажчику.

Посилання C ++ проти таблиці порівняння вказівників

Основне порівняння між C ++ Reference та Pointer розглянемо нижче:

Основа порівняння між C ++ Reference та PointerC ++ ДовідкаПокажчик
ЗмінніПосилання можна сказати як псевдонім до існуючої змінної. Основне використання цієї змінної працює як параметр, який працює як прохідний посилання. Це передається функції. Функція, якій передано це, працює на оригінальній змінній замість копії у проході за значенням. Зміни, внесені всередину функції, відобразяться і зовні.Змінні вказівника - це змінні, які зберігають адресу. На відміну від звичайних змінних, які у нас є int, double та char, вони зберігають адреси пам'яті. Для спрощення програмування виникає потреба в цій змінній. Це змінна, яка може зберігати значення певного типу.
ДеклараціяДекларація еталонної змінної C ++ робиться додаванням символу '&' перед змінною. Якщо він використовується з виразом, він означає, що він працює як адреса оператора. Він використовується для надання іншої назви існуючій змінній.
Синтаксис:
введіть & newName = існуюче ім'я ;
// або
введіть & newName = існуюче ім'я ;
// або
введіть & newName = існуюче ім'я ;
Наприклад:
/ * Декларація опорного тесту та ініціалізація * /
#включати
використання простору імен std;
int main () (
ім'я рядка = "Priya"; // Оголосити змінну рядка під назвою name
рядок & refName = ім'я; // Оголосити посилання (псевдонім) на ім'я змінної
// І refName, і ім’я посилаються на одне і те ж значення "Priya"
cout << ім'я << endl; // Він друкує значення змінної “Priya”
cout << refName << endl; // Він друкує значення посилання "Priya"
Тепер змініть значення Name
refName = “Карішма”; // Повторно призначте нове значення refName
cout << refName << endl;
cout << ім'я << endl; // Значення числа також змінюється “Карішма”
name = "Snehal"; // Повторно призначити нове значення для імені
cout << namer << endl;
cout << refName << endl; // Значення refName також змінюється на "Snehal"
)
Це означає, що значення опорної змінної можуть бути змінені в оригіналі та копії змінної.
Перш ніж використовувати вказівник будь-де в програмі, його слід заздалегідь оголосити. Щоб оголосити покажчик і повідомити системі про те, що це вказівник, змінна має префікс "*". Вказівник супроводжується типом даних, який може бути цілим чи подвійним тощо.
Синтаксис:
тип * pntr ; // Оголосити змінну вказівника під назвою pntr як вказівник типу
// або
тип * pntr ;
// або
тип * pntr ;
Наприклад:
int * newPtr; // Оголосити змінну вказівника під назвою newPtr, що вказує на int (int pointer)
Цей покажчик буде містити адресу. Ця адреса містить значення int.
подвійний * newdPtr; // Оголосити подвійний покажчик
* Вказує на те, що вказівник оголошується і не діє як оператор.
ПерепризначенняДовідкову змінну не можна перепризначити.
Приклад:
int x = 5;
int y = 6;
int & r = x;
Вказівник можна перепризначити, і ця властивість стане в нагоді, коли розробник реалізує структури даних, такі як пов'язані списки, дерева тощо.
Приклад:
int x = 5;
int y = 6;
int * p;
p = & x;
p = & y;
Адреса пам'ятіДовідкова змінна має таку ж адресу, що і вихідна змінна. Ці посилання можуть бути передані різним функціям, вони можуть зберігатися в різних класах і т. Д. Посилання ніколи не вказує на нову змінну, поки стара не буде видалена або не вийде із сфери застосування.Вказівник має власну адресу пам'яті і зберігає його у стеку. Вказівник є незалежною змінною і може мати нові значення, присвоєні собі.
Нульове значенняПосилання не може присвоювати нульове значення.Вказівник може мати нульове значення, призначене безпосередньо.
АргументиДовідкова змінна може бути посилана байпасом за значенням. Тут аргументи передаються за значенням функції. Клон робиться і надсилається до функції, використовуючи його. Зміни, внесені до копії, не впливають на оригінальну змінну.Коли ми хочемо змінити оригінальну копію, то це можна зробити, передавши покажчик об'єкта у функцію. Це відомо як пропуск за посиланням.
Коли використовуватиПосилання опосередковано звертаються до змінної. Розглянемо наступний приклад:
перерахувати день
(
Неділя, понеділок, …
);
Якщо ми визначимо змінну
день х;
І ми хочемо перевантажити оператора на оператор, тоді ми можемо написати так:
день та оператор ++ (день та день)
(
d = (день) (d + 1);
повернути d;
)
Коротше кажучи, це можна використовувати у функціональних параметрах та типових типах.
Використання покажчиків без попереднього оголошення.
день * оператор ++ (день * d);
Це можна використовувати для реалізації структур даних та арифметичних операцій вказівника.

Висновок - C ++ Посилання проти вказівника

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

Рекомендована стаття

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

  1. Відмінності Python vs C ++
  2. Продуктивність C проти C ++ - найкращі відмінності
  3. МонгоДБ проти Кассандри
  4. Мобкс проти Редукс
  5. C ++ вектор проти масиву: найкращі відмінності
  6. MongoDB проти DynamoDB: Функції
  7. MongoDB vs SQL: Які функції
  8. C проти C #: Функції