Преди да обсъдим разликата между показалец и препратка, нека първо разгледаме накратко значението на тези два термина. В програмата данните заемат памет. Трябва да се знае точното местоположение на паметта, в което са били поставени данните по време на изпълнение, за да има достъп до тях. Показатели променливи и референтни променливи се използват за достъп до тези данни и манипулиране на адресите на паметта, на които се намират. Тоест, както указатели, така и референции могат да се използват за индиректно препращане към обекти. Те по същество държат адресите на паметта като свои стойности. Най- ключова разлика между показалец и препратка е това указател е променлива, която съхранява адреса на мястото на паметта на друга променлива докато а reference е променлива, която се отнася до друга променлива. Двата механизма, на показалка и справка, имат различен синтаксис и употреба.
Показалец е обект на език на програмиране, който съхранява адреса на паметта на стойност в изчислителната памет.
int i = 5;
int * ptr = & i;
Първият ред дефинира променлива, инициализирана със стойност 5. Вторият ред определя указател към адреса на паметта на променливата. Тук 'ptr' се декларира като обект от тип 'указател към int', чиято първоначална стойност е адресът на обект i. По същество променлива ptr сочи към i чрез запазване на адреса му на памет.
Повиква се получаването на стойността, запаметена в памет dereferencing. * Операторът се използва за отписване на показалеца. След като декларациите са направени, косвеният израз * ptr dereferences ptr да се отнася до i.
За да промените стойността на i, може да се използва следното присвояване;
* ptr = 20;
Показалците могат да бъдат преназначени да се отнасят и за различни обекти.
А нулев указател е специален тип показалец. Нулевият показалец често се обозначава с 0 или нула и не сочи към нищо. Добра практика е да използвате нулев указател в случай, че нямате точен адрес, който да бъде присвоен на показалеца. Това задание може да се използва в логически операции и условия.
Показалците могат да бъдат използва се за съхраняване и управление на адресите на динамично разпределена памет. Внедряването и контролирането на структури от данни като стекове, опашки и списъци могат да бъдат ефективни с помощта на указатели. Например опашката може да има два указателя; указател на главата и показалец на опашката. Показалците също могат да се използват за предаване на променливи по техен адрес, което би позволило стойността да бъде променена. Директното манипулиране на паметта или на карта с памет устройства също може да се управлява с помощта на указатели.
Указателите позволяват както защитен, така и незащитен достъп до адресираната памет. Следователно трябва да се вземат необходимите предпазни мерки, за да се провери дали съдържанието на указател е валидно. В противен случай пренасочването на указател с невалиден адрес на памет може да доведе до срив на програмата.
Указателите се поддържат на езици като 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 -