І вказівники, і посилання - це найпотужніші функції в C і C ++, які дозволяють програмістам безпосередньо маніпулювати адресою пам'яті для ефективного управління пам'яттю.
Обидва є змінними, які використовуються для посилання на інші об'єкти побічно, і вони мають загальні риси на поверхні. Хоча вони мають багато спільних можливостей, вони також дуже складні для розуміння.
Вказівник - це змінна, яка містить адресу пам'яті іншої змінної, тоді як посилання є як вказівник, який може бути використаний для опосередкованого посилання на іншу змінну.
Більшість програмістів, здається, розвивають певне розуміння того, коли використовувати вказівники та коли використовувати посилання, але вони часто стикаються з проблемами, вирішення яких видається незрозумілим..
Отже, щоб краще зрозуміти філософію, давайте розберемось у різниці між ними.
Кожна змінна - це місце пам’яті, яке визначається її адресою, і поєднується з ідентифікатором, який містить деяке значення, яке може бути змінено під час програми. Простіше кажучи, змінна - символ, який представляє величину.
Покажчик - це змінна, яка містить адресу пам'яті іншої змінної. Вказівник - це не що інше, як адреса, а змінна, що зберігає вказівник, називається змінною вказівника.
Ідея полягає у використанні ідентифікаторів (або імен) замість числових адрес, щоб полегшити тягар програмування, знижуючи тим самим складність програм. Оскільки ці адреси стосуються фактичних місць в пам'яті комп'ютера, вказівники можуть використовуватися для доступу та маніпулювання вмістом, що зберігається в пам'яті.
Як і будь-яка змінна чи константа, покажчики повинні бути оголошені для їх типів. Оскільки покажчики містять адреси пам'яті, що належать до окремого типу даних, їх потрібно оголосити за допомогою покажчиків, перш ніж ви зможете працювати з ними. Загальною формою оголошення вказівника є:
Тип_типу * var-name;
Тут "Data_type" - базовий тип вказівника, а "var-name" - змінна вказівника. Зірочка (*) тут використовується для оголошення вказівника, який позначає змінну "var-name" як змінну вказівника.
int * p; // цілочисельний покажчик
плавати * х; // поплавковий покажчик
Тут змінна "p" вказує на цілий тип даних, який оголошується як "int", який відноситься до типу даних змінної. Аналогічно, у другому прикладі "float" позначає тип даних змінної "x", яка насправді позначається як вказівник на змінну з плаваючою комою..
Посилання - це як вказівник з непрямим доступом до змінної. Це як псевдонім для іншої змінної, тобто це лише інша назва вже існуючої змінної.
Це дозволяє програмістам створити друге ім'я для змінної, яку вони можуть використовувати для маніпулювання вмістом, що зберігається в цій змінній. Це сутність, псевдонім для іншої змінної, і вона має таку ж адресу, що і вихідна змінна. Він підтримує передачу посилань, що виконує функцію формальних параметрів, і як тільки це визначено для посилання на змінну, її неможливо повторно використати, що означає, що вона не може бути передана до іншої змінної.
На відміну від покажчиків, їм не потрібен оператор перенаправлення для доступу до значення; насправді їх можна використовувати як звичайні змінні.
int i;
int & ri = i;
Тут "ri" - це ціла посилання, ініціалізована на "i". Він оголошує "ri" як об'єкт типу "посилання на int". Посилання можна легко сплутати з покажчиком, який є незалежною змінною, адресні значення якого не можна перепризначити після створення.
- Обидва надають майже однакові можливості з точки зору зручності використання, і відмінність може бути хитрою. Вказівник - це лише змінна, яка зберігає адресу пам'яті іншої змінної, тоді як посилання є як псевдонім для вже існуючої змінної. Це створює друге ім'я для змінної, яку можна використовувати для зміни вмісту, що зберігається в цій змінній.
- Вказівник - це як і будь-яка інша змінна, яка зберігає фрагмент даних. На відміну від інших змінних, вказівні змінні зберігають адреси пам'яті замість значень. Вказівник відмежовується за допомогою оператора опосередкування * для доступу до місця пам'яті змінної, на яку вона вказує. З іншого боку, посилання не потребує жодного оператора перенаправлення для доступу до значення.
- На відміну від покажчиків, які можна ініціалізувати в будь-який час, посилання повинні бути призначені при ініціалізації. До вказівників можна отримати прямий доступ, тоді як посилання не можна отримати прямого доступу.
- Змінна вказівника має своє власне розташування в пам'яті, що означає, що при оголошенні вказівника ви вказуєте місце, яке є адресою пам'яті, присвоєною кожній одиниці пам'яті. Змінна вказівника має ту саму адресу, де вона зберігається в пам'яті. З іншого боку, опорна змінна є псевдонімом для іншої змінної, таким чином, приймаючи адресу опорної змінної.
- NULL являє собою кінець списку, тобто означає, що значення невідоме, і воно вказує, що змінна не має дійсного адресного простору. Значення NULL може бути призначене безпосередньо змінної вказівника, що дозволяє припустити, що воно нікуди не вказує, тоді як NULL не може бути призначене посилальній змінній.
Покажчики завжди були одними з улюблених тем обговорення програмістів C / C ++, поки посилання не з'явилося. Посилання дещо схожі на покажчики, але мають порівняно добрі частки плюсів і мінусів. Хоча обидва можуть використовуватися для зміни локальних змінних однієї функції в межах іншої функції, вони мають свої відмінності. Обидва є потужними функціями в C і C ++, які дозволяють безпосередньо маніпулювати пам'яттю, але за кількома винятками. Вказівник містить адресу пам'яті змінної, тоді як посилання є лише псевдонімом для іншої змінної.