Перш ніж обговорити різницю між вказівником та відсиланням, давайте спочатку коротко розглянемо значення цих двох термінів. У програмі дані займають пам'ять. Точне місце пам’яті, в яке були розміщені дані, слід знати, щоб отримати доступ до них. Змінні вказівника і контрольні змінні використовуються для доступу до цих даних та маніпулювання адресами пам'яті, на яких вони перебувають. Тобто і вказівники, і посилання можуть використовуватися для позначення об'єктів опосередковано. Вони по суті зберігають адреси пам'яті як свої значення. The ключова різниця між вказівником і посиланням є те покажчик - це змінна, яка зберігає адресу місця пам'яті іншої змінної а посилання - це змінна, яка посилається на іншу змінну. Два механізми, то покажчик та посилання мають різний синтаксис та використання.
Вказівник є об'єкт мови програмування, який зберігає адресу пам'яті значення в обчислювальній пам'яті.
int i = 5;
int * ptr = & i;
Перший рядок визначає змінну, ініціалізовану зі значенням 5. Другий рядок визначає вказівник на адресу пам'яті змінної. Тут 'ptr' оголошується як об'єкт типу 'покажчик на int', початкове значення якого є адресою об'єкта i. По суті змінна ptr вказує на i, зберігаючи її адресу пам'яті.
Отримати значення, збережене в пам'яті, називається перенаправлення. * Оператор * використовується для зменшення вказівника. Після завершення декларації непрямий вираз * ptr dereferences ptr для позначення i.
Щоб змінити значення i, можна використовувати наступне призначення;
* ptr = 20;
Покажчики також можуть бути призначені для позначення різних об'єктів.
А нульовий покажчик - особливий тип покажчика. Нульовий покажчик часто позначається 0 або null і не вказує ні на що. Доброю практикою є використання нульового вказівника у випадку відсутності точної адреси для призначення покажчика. Це завдання може використовуватися в логічних операціях та умовах.
Покажчики можуть бути використовується для зберігання та управління адресами динамічно розподіленої пам'яті. Реалізація та контроль структур даних, таких як стеки, черги та списки, можуть бути ефективними за допомогою покажчиків. Наприклад, черга може мати два вказівники; вказівник голови та вказівник хвоста. Покажчики можуть також використовуватися для передачі змінних за їх адресою, що дозволило б змінити значення. Безпосередньо маніпулювання пам’яттю або пристроями, відображеними на пам’яті, також може здійснюватися за допомогою покажчиків.
Покажчики дозволяють захищений та незахищений доступ до адреси пам'яті. Тому необхідно вживати необхідних запобіжних заходів, щоб переконатися, що вміст вказівника є дійсним. В іншому випадку перенаправлення покажчика з недійсною адресою пам'яті може призвести до збою програми.
Покажчики підтримуються на таких мовах, як C, C ++, Pascal та багатьох мовах складання.
Покажчик а вказуючи на адресу пам'яті, пов'язану зі змінною б.
Довідка - просто альтернативний ідентифікатор значення, збереженого в пам'яті. Це дозволяє програмі опосередковано отримувати доступ до певної дати.
int i = 5;
int & ref = я;
Перший рядок визначає змінну, ініціалізовану зі значенням 5. Другий рядок оголошує 'ref' як об'єкт типу 'посилання на int', який посилається на i. Посилання відрізняється від самих даних тим, що посилання реалізується як фізична адреса конкретного даного даних, що зберігається в пам'яті.
Після визначення посилання неможливо перепризначити нове значення. Посилання завжди посилається на об'єкт, з яким він ініціалізується. У наступному призначенні ref все ще посилається на i, але тепер значення становить 20.
ref = 20;
Згідно з вищенаведеним прикладом, перенаправлення посилань не вимагає жодних операторів.
Посилання можуть використовуватися, коли змінна завжди посилається на об'єкт. Це тому, що, на відміну від покажчиків, посилання не можуть бути недійсними і повинні бути призначені завжди при ініціалізації. Оскільки посилання завжди повинні посилатися на якийсь об'єкт, перетворення такої змінної забезпечує те, що програма працюватиме ефективно та коректно. Зважаючи на те, що немає нульових посилань, дійсність опорної змінної не потрібно перевіряти.
Довідкові змінні можуть бути використовується для ефективного передачі великих даних як аргументів до процедур. Посилання також використовуються для обміну великими даними між різними областями коду, оскільки кожен код зберігає посилання на дані.
Мови програмування, такі як C ++, Java, Python, Perl, PHP, Ruby тощо.
Вказівник: Вказівник - це адреса пам'яті об'єкта, що зберігається в обчислювальній пам'яті.
Довідка: Посилання - це альтернативний ідентифікатор або псевдонім для об'єкта.
Вказівник: Вказівник оголошується оператором *.
Довідка: Посилання оголошується разом із оператором &.
Вказівник: Змінна вказівника вимагає відхилення оператора *.
Довідка: Довідкова змінна не вимагає, щоб жоден оператор був відмежований.
Вказівник: Покажчики можуть бути ініціалізовані до нуля. Такі змінні називаються нульовими покажчиками.
Довідка: Посилання не можна ініціалізувати до нуля. Немає такого поняття, як нульова посилання. Посилання завжди має стосуватися об'єкта.
Вказівник: Змінна вказівника може бути переназначена для позначення різних об'єктів.
Довідка: Довідкову змінну не можна перепризначити. Він завжди стосується об'єкта, з яким він був ініціалізований.
Вказівник: Змінні вказівника слід використовувати, коли не існує можливості посилатися на нічого, або коли потрібно посилатися на різні речі в різний час.
Довідка: Довідкові змінні повинні використовуватися тоді, коли завжди буде об'єкт, на який слід посилатися, і коли не потрібно використовувати цю посилальну змінну для посилання на що-небудь інше, крім цього об'єкта.
Вказівник: Змінні вказівника можуть бути використані для реалізації алгоритмів та структур даних.
Довідка: Довідникові змінні можуть використовуватися у параметрах функції, а типи повернення визначають корисні інтерфейси.
Вказівник: Мови програмування, такі як C, C ++, Pascal та багато мов асемблери, підтримують покажчики.
Довідка: Мови програмування, такі як C ++, Java, Python, Perl, PHP, Ruby тощо.
Надано зображення: "Покажчики" цього файлу створено Користувачем: SvenTranslation.Власна робота. Це векторне зображення було створено за допомогою Inkscape. (CC BY-SA 3.0) через Commons -