Preden razpravljamo o razliki med kazalcem in referenco, najprej na kratko pogledamo pomen teh dveh pojmov. V programu podatki zasedejo pomnilnik. Natančna lokacija pomnilnika, v katerega so bili podatki vloženi v času izvedbe, bi morala biti znana, da bi lahko dostopali do njih. Spremenljivke kazalcev in referenčne spremenljivke se uporabljajo za dostop do teh podatkov in manipuliranje s pomnilniškimi naslovi, na katerih so. To pomeni, da se lahko kazalci in sklice uporabljajo za posredno sklicevanje na predmete. V bistvu imajo spominske naslove kot svoje vrednosti. The ključna razlika med kazalcem in referenco je to kazalec je spremenljivka, ki shrani naslov pomnilniške lokacije druge spremenljivke medtem ko a referenca je spremenljivka, ki se nanaša na drugo spremenljivko. Oba mehanizma, the kazalec in sklici imajo različno sintakso in uporabo.
Kazalnik je predmet programskega jezika, ki shrani pomnilniški naslov vrednosti v računalniškem pomnilniku.
int i = 5;
int * ptr = & i;
Prva vrstica definira spremenljivko, inicializirano z vrednostjo 5. Druga vrstica določa kazalec na pomnilniški naslov spremenljivke. Tu je 'ptr' deklariran kot objekt tipa 'kazalec na int', katerega začetna vrednost je naslov predmeta i. V bistvu ptr spremenljivka kaže na i tako, da shrani njen pomnilniški naslov.
Pridobi se vrednost, shranjena na pomnilniškem mestu dereferenciranje. Operater * se uporablja za odstranjevanje kazalca. Po končani deklaraciji se posredni izraz * ptr dereferences ptr sklicuje na i.
Za spremembo vrednosti i lahko uporabimo naslednjo dodelitev;
* ptr = 20;
Kazalniki se lahko prerazporedijo tudi za različne predmete.
A ničelni kazalec je posebna vrsta kazalca. Ničelni kazalec je pogosto označen z 0 ali nič in ne kaže na nič. Dobra praksa je, da uporabite ničelni kazalec, če nimate natančnega naslova, ki bi mu bil dodeljen. To nalogo lahko uporabimo v logičnih operacijah in pogojih.
Kazalci so lahko uporablja se za shranjevanje in upravljanje naslovov dinamično dodeljenega pomnilnika. Izvajanje in nadzor struktur podatkov, kot so napisi, čakalne vrste in seznami, je mogoče učinkovito uporabiti z uporabo kazalcev. Na primer, čakalna vrsta ima lahko dva kazalca; kazalec glave in kazalec repa. Kazalniki se lahko uporabljajo tudi za prenos spremenljivk po naslovu, kar bi omogočilo spreminjanje vrednosti. Neposredna manipulacija s pomnilnikom ali napravami, ki jih preslikate v pomnilnik, je mogoče upravljati tudi s pomočjo kazalcev.
Kazalniki omogočajo zaščiten in nezaščiten dostop do naslovnega spomina. Zato je treba sprejeti potrebne varnostne ukrepe, da preverite, ali je vsebina kazalca veljavna. V nasprotnem primeru lahko izstavitev kazalca z neveljavnim pomnilniškim naslovom povzroči zrušitev programa.
Kazalci so podprti v jezikih, kot so C, C ++, Pascal in številni jeziki za sestavljanje.
Kazalec a kaže na spominski naslov, ki je povezan s spremenljivko b.
Referenca je preprosto nadomestni identifikator za vrednost, shranjeno v pomnilniku. Programu omogoča posredno dostop do določenega podatka.
int i = 5;
int & ref = jaz;
Prva vrstica definira spremenljivko, inicializirano z vrednostjo 5. Druga vrstica razglasi 'ref' kot objekt tipa 'sklicevanje na int', ki se nanaša na i. Referenca se razlikuje od podatkov, saj se referenca izvaja kot fizični naslov določenega podatka, ki je shranjen v pomnilniku.
Ko je določena, referenci ne moremo dodeliti nove vrednosti. Referenca se vedno nanaša na objekt, s katerim je inicializiran. V naslednji nalogi se ref še vedno nanaša na i, vendar je vrednost zdaj 20.
ref = 20;
Glede na zgornji primer napotitve sklicevanja ne potrebujejo.
Reference se lahko uporabljajo, kadar se spremenljivka vedno nanaša na predmet. To je zato, ker, za razliko od kazalcev, sklici ne morejo biti nični in morajo biti vedno dodeljeni ob inicializaciji. Ker se morajo reference vedno nanašati na nek predmet, se s takšno spremenljivko sklicevanje zagotavlja, da bi program deloval učinkovito in pravilno. Glede na to, da ni ničelnih sklicev, veljavnosti referenčne spremenljivke ni treba preizkušati.
Referenčne spremenljivke so lahko uporablja se za učinkovito posredovanje velikih podatkov kot argumentov postopkom. Sklici se uporabljajo tudi pri deljenju velikih podatkov med različnimi območji kod, saj se vsaka koda sklicuje na podatke.
Podporni jeziki za programiranje, kot so C ++, Java, Python, Perl, PHP, Ruby itd.
Kazalec: Kazalnik je pomnilniški naslov predmeta, shranjenega v računalniškem pomnilniku.
Referenca: Referenca je alternativni identifikator ali vzdevek objekta.
Kazalec: Kazalnik je deklariran pri operaterju *.
Referenca: Sklic je naveden pri operaterju &.
Kazalec: Kazalna spremenljivka zahteva, da se operater * odpravi.
Referenca: Referenčna spremenljivka ne potrebuje nobenega operaterja, da se izbriše.
Kazalec: Kazalniki se lahko inicializirajo na nič. Take spremenljivke imenujemo ničelni kazalci.
Referenca: Reference ni mogoče inicializirati na nič. Ničelna referenca ni. Referenca se mora vedno nanašati na predmet.
Kazalec: Spremenljivka kazalca je lahko dodeljena tako, da se nanaša na različne predmete.
Referenca: Referenčne spremenljivke ni mogoče ponovno dodeliti. Vedno se nanaša na predmet, s katerim je bil inicializiran.
Kazalec: Spremenljivke kazalcev je treba uporabiti, kadar ne obstaja možnost sklicevanja na nič ali kadar se v različnih obdobjih zahteva sklicevanje na različne stvari.
Referenca: Referenčne spremenljivke je treba uporabiti, kadar bo vedno obstajal predmet, na katerega se bo skliceval, in kadar ni treba, da se ta referenčna spremenljivka uporablja za kaj drugega kot ta objekt.
Kazalec: Spremenljivke kazalcev se lahko uporabljajo za izvajanje algoritmov in struktur podatkov.
Referenca: Referenčne spremenljivke se lahko uporabljajo v funkcijskih parametrih, povratni tipi pa definirajo uporabne vmesnike.
Kazalec: Programski jeziki, kot so C, C ++, Pascal in številni jeziki za sestavljanje, podpirajo kazalce.
Referenca: Podporni jeziki za programiranje, kot so C ++, Java, Python, Perl, PHP, Ruby itd.
Vljudnost slik: "Kazalci" te datoteke je ustvaril uporabnik: SvenTranslation.Svoje delo. Ta vektorska slika je bila ustvarjena z Inkscapeom (CC BY-SA 3.0) prek Commons -