Ero osoittimen ja referenssin välillä

Sekä osoittimet että viitteet ovat C: n ja C ++: n tehokkaimpia ominaisuuksia, joiden avulla ohjelmoijat voivat manipuloida muistiosoitetta suoraan tehokkaan muistinhallinnan varmistamiseksi.

Molemmat ovat muuttujia, joita käytetään viittaamaan epäsuorasti muihin esineisiin, ja niillä on yhteisiä piirteitä pinnalla. Vaikka heillä on paljon yhteisiä ominaisuuksia, he ovat myös erittäin monimutkaisia ​​ymmärrettävissä.

Osoitin on muuttuja, jolla on toisen muuttujan muistiosoite, kun taas viite on kuin osoitin, jota voidaan käyttää viittaamaan epäsuorasti toiseen muuttuimeen.

Useimmat ohjelmoijat näyttävät kehittävän ymmärrystä siitä, milloin osoittimia käytetään ja milloin viitteitä käytetään, mutta he kohtaavat usein ongelmia, joiden ratkaisu vaikuttaa epäselvältä..

Joten ymmärtää paremmin filosofiaa, ymmärretään ero näiden kahden välillä.

Mikä on osoitin?

Jokainen muuttuja on muistipaikka, joka määritetään osoitteensa kanssa ja pariksi tunnisteen kanssa, joka sisältää arvon, jota voidaan muuttaa ohjelman aikana. Yksinkertaisesti sanottuna muuttuja on symboli, joka edustaa määrää.

Osoitin on muuttuja, joka sisältää toisen muuttujan muistiosoitteen. Osoitin ei ole muuta kuin osoite ja osoitinta tallentava muuttuja kutsutaan osoittimen muuttujaksi.

Ajatuksena on käyttää tunnisteita (tai nimiä) numeeristen osoitteiden sijasta ohjelmoinnin taakan helpottamiseksi ja siten vähentää ohjelmien monimutkaisuutta. Koska nämä osoitteet viittaavat todellisiin sijainteihin tietokoneen muistissa, osoittimia voidaan käyttää muistiin tallennetun sisällön käyttämiseen ja käsittelemiseen.

Kuten mikä tahansa muuttuja tai vakio, osoittimet on ilmoitettava niiden tyypeille. Koska osoittimet sisältävät erilliseen tietotyyppiin kuuluvat muistiosoitteet, ne on ilmoitettava osoittimilla, ennen kuin voit työskennellä niiden kanssa. Osoitin-ilmoituksen yleinen muoto on:

Data_type * var-name;

Tässä ”Data_type” on osoittimen perustyyppi ja “var-name” on osoittimen muuttuja. Tähdellä (*) käytetään osoittamaan osoitinta, joka osoittaa muuttujan var-name osoittimen muuttujaksi.

int * p; // kokonaislukuosoitin

kellua * x; // kelluva osoitin

Tässä muuttuja “p” osoittaa kokonaisluvutietotyypin, joka julistetaan nimellä “int”, joka viittaa muuttujan tietotyyppiin. Samoin toisessa esimerkissä ”kellua” viittaa muuttujan “x” tietotyyppiin, joka itse asiassa on osoitettu liukulukujen muuttujan osoittimelle..

Mikä on viite?

Viite on kuin osoitin, jolla on epäsuora pääsy muuttujaan. Se on kuin toisen muuttujan alias, tarkoittaen, että se on vain olemassa olevan muuttujan toinen nimi.

Sen avulla ohjelmoijat voivat luoda toisen nimen muuttujalle, jota he voivat käyttää kyseiseen muuttujaan tallennetun sisällön käsittelemiseen. Se on entiteetti, joka on alias toiselle muuttujalle ja jolla on sama osoite kuin alkuperäisellä muuttujalla. Se tukee ohitusviittausta, joka toimii funktiona muodollisina parametreina, ja kun se on määritelty viittaamaan muuttujaan, sitä ei voida asettaa uudelleen, mikä tarkoittaa, että sitä ei voida viitata toiseen muuttujaan.

Toisin kuin osoittimet, he eivät tarvitse neuvotteluoperaattoria pääsemään arvoon; itse asiassa niitä voidaan käyttää kuten normaalimuuttujia.

int i;

int & ri = i;

Tässä “ri” on kokonaislukuviite, joka alustetaan “i”: lle. Se julistaa ”ri” tyypin ”viittaus int” -objektiksi. Viite voidaan helposti sekoittaa osoittimeen, joka on itsenäinen muuttuja, jonka osoitearvoja ei voida määrittää uudelleen luomisen jälkeen.

Ero osoittimen ja referenssin välillä

  1. Osoittimen ja referenssin perusteet

- Molemmat tarjoavat käytännöllisesti katsoen samanlaisia ​​ominaisuuksia käytettävyyden suhteen ja erottaminen voi olla hankalaa. Osoitin on vain muuttuja, joka tallentaa toisen muuttujan muistiosoitteen, kun taas viite on kuin alias jo olemassa olevalle muuttujalle. Se luo toisen nimen muuttujalle, jota voidaan käyttää muuttujan tallennetun sisällön muokkaamiseen.

  1. Osoittimen ilmoitus ja viite

- Osoitin on kuin mikä tahansa muu muuttuja, joka tallentaa pala dataa. Toisin kuin muut muuttujat, osoitinmuuttujat tallentavat muistiosoitteet arvojen sijasta. Osoittimeen viitataan käyttämällä indirektio-operaattoria * päästäksesi sen osoittaman muuttujan muistipaikkaan. Viite sitä vastoin ei tarvitse mitään neuvotteluoperaattoria pääsemään arvoon.

  1. Osoittimen ja referenssin uudelleenasettelu

- Toisin kuin osoittimet, jotka voidaan alustaa milloin tahansa, referenssit on osoitettava alustaessa. Osoittimiin pääsee suoraan, kun taas viitteisiin ei pääse suoraan.

  1. Osoittimen ja osoitteen muistiosoite

- Osoittimen muuttujalla on oma sijainti muistissa, eli kun ilmoitat osoittimen, määrität sijainnin, joka on jokaiselle muistiyksikölle määritetty muistiosoite. Osoittimen muuttujalla on sama osoite, johon se tallennetaan muistiin. Viitemuuttuja puolestaan ​​on alias toiselle muuttujalle ottaen siten viitemuuttujan osoitteen.

  1. Osoittimen ja referenssin NULL-arvo

- NULL edustaa luettelon loppua, mikä tarkoittaa, että arvo on tuntematon ja se määrittelee, että muuttujalla ei ole kelvollista osoitetilaa. NULL-arvo voidaan osoittaa suoraan osoittimelle, mikä viittaa siihen, että se ei osoita mihinkään, kun taas NULL-arvoa ei voida antaa viitemuuttujalle.

Osoitin vs. viite: vertailukaavio

Yhteenveto osoittimesta ja viitteestä

Osoittimet ovat aina olleet C / C ++ -ohjelmoijien suosikki keskustelunaiheita, kunnes viitteet tulivat kuvaan. Viitteet ovat jonkin verran samanlaisia ​​kuin osoittimet, mutta niillä on kohtuullinen osuus eduista ja haitoista verrattuna. Vaikka molempia voidaan käyttää yhden funktion paikallisten muuttujien muuttamiseen toisen funktion sisällä, niillä on erot. Molemmat ovat C: n ja C ++: n tehokkaita ominaisuuksia, joiden avulla voit manipuloida muistia suoraan, mutta muutamaa poikkeusta lukuun ottamatta. Osoitin pitää muuttujan muistiosoitetta, kun taas viite on vain toisen muuttujan alias.