Ennen kuin keskustelemme osoittimen ja viittauksen välisestä erosta, tarkastellaan ensin lyhyesti näiden kahden termin merkitystä. Ohjelmassa tiedot vievät muistia. Muistin tarkka sijainti, johon tiedot asetettiin suoritushetkellä, pitäisi olla tiedossa, jotta niitä voidaan käyttää. Osoittimen muuttujat ja viitemuuttujat käytetään pääsemään näihin tietoihin ja käsittelemään muistiosoitteita, joissa he ovat. Toisin sanoen sekä osoittimia että viitteitä voidaan käyttää viittaamaan kohteisiin epäsuorasti. He pitävät muistiosoitteita olennaisina arvoina. avainero osoittimen ja viitteen välillä on se osoitin on muuttuja, joka tallentaa toisen muuttujan muistipaikan osoitteen kun taas a viite on muuttuja, joka viittaa toiseen muuttujaan. Nämä kaksi mekanismia, osoitin ja viittauksilla, on eri syntaksi ja käyttö.
Osoitin on ohjelmointikieliobjekti, joka tallentaa arvon muistiosoitteen tietokonemuistissa.
int i = 5;
int * ptr = & i;
Ensimmäinen rivi määrittelee muuttujan, joka alustetaan arvolla 5. Toinen rivi määrittää osoittimen muuttujan muistiosoitteeseen. Tässä 'ptr' julistetaan tyypin 'osoitin int' -objektiksi, jonka alkuarvo on kohteen i osoite. Pohjimmiltaan ptr-muuttuja osoittaa i: ään tallentamalla sen muistiosoitteen.
Muistipaikkaan tallennetun arvon hankkimista kutsutaan dereferencing. * -Operaattoria käytetään osoittimen nollaamiseen. Kun ilmoitukset on tehty, epäsuora lauseke * ptr poikkeaa ptr: stä viitaamaan i: ään.
I-arvon muuttamiseksi voidaan käyttää seuraavaa määritystä;
* ptr = 20;
Osoittimet voidaan osoittaa uudelleen viittaamaan myös erilaisiin kohteisiin.
nollaosoitin on erityinen osoitintyyppi. Null-osoitinta merkitään usein nollalla tai nollalla eikä osoita mitään. Hyvä käytäntö on käyttää nollaosoitinta, jos osoittimelle ei määritetä tarkkaa osoitetta. Tätä tehtävää voidaan käyttää loogisissa operaatioissa ja olosuhteissa.
Osoittimet voivat olla käytetään tallentamaan ja hallitsemaan dynaamisesti allokoidun muistin osoitteita. Tietorakenteiden, kuten pinot, jonot ja luettelot, toteutus ja hallinta voidaan tehostaa osoittimien avulla. Esimerkiksi jonossa voi olla kaksi osoitinta; pääosoitin ja häntäosoitin. Osoittimia voidaan käyttää myös siirtämään muuttujia osoitteensa mukaan, mikä mahdollistaisi arvon muuttamisen. Muistin tai muistikartoitettujen laitteiden suora käsittely voi tapahtua myös osoittimien avulla.
Osoittimet sallivat suojatun ja suojaamattoman pääsyn osoitettuun muistiin. Siksi on toteutettava tarvittavat varotoimenpiteet osoittimen sisällön paikkansapitävyyden varmistamiseksi. Muutoin osoittimen poistaminen virheellisestä muistiosoitteesta saattaa aiheuttaa ohjelman kaatumisen.
Osoittimia tuetaan sellaisilla kielillä kuin C, C ++, Pascal ja monilla kokoonpanokielellä.
Osoitin osoittaa muuttujaan liittyvään muistiosoitteeseen b.
Viite on yksinkertaisesti vaihtoehtoinen tunniste muistiin tallennetulle arvolle. Se mahdollistaa ohjelman pääsyn epäsuorasti tiettyyn peruspisteeseen.
int i = 5;
int & ref = i;
Ensimmäinen rivi määrittelee muuttujan, joka alustetaan arvolla 5. Toinen rivi ilmoittaa 'ref' tyypin 'viite int' -objektiksi, joka viittaa i: ään. Viite eroaa itse tiedosta sillä perusteella, että viite toteutetaan tietyn muistiin tallennetun peruspisteen fyysisenä osoitteena.
Kun referenssi on määritelty, sitä ei voida osoittaa uudelleen uuteen arvoon. Viite viittaa aina kohteeseen, jonka kanssa se alustetaan. Seuraavassa tehtävässä ref viittaa edelleen i: hen, mutta arvo on nyt 20.
ref = 20;
Yllä olevan esimerkin mukaan referenssien poistaminen ei vaadi mitään operaattoreita.
Viittauksia voidaan käyttää, kun muuttuja viittaa aina objektiin. Tämä johtuu siitä, että toisin kuin osoittimet, referenssit eivät voi olla tyhjiä ja ne on aina annettava alustuksen yhteydessä. Koska viitteiden on aina viitattava johonkin esineeseen, tällaisen muuttujan tekeminen viitteeksi varmistaa, että ohjelma toimisi tehokkaasti ja oikein. Koska nollaviittauksia ei ole, viitemuuttujan pätevyyttä ei tarvitse testata.
Viitemuuttujat voivat olla käytetään siirtämään suuria tietoja tehokkaasti argumentteina menettelyille. Viittauksia käytetään myös jaettaessa suurta dataa eri koodialueiden välillä, koska kukin koodi pitää viittauksen dataan.
Ohjelmointikielet, kuten C ++, Java, Python, Perl, PHP, Ruby jne. Tukevat viitteitä.
Osoitin: Osoitin on laskennan muistiin tallennetun objektin muistiosoite.
Viite: Viite on vaihtoehtoinen tunniste tai alias objektille.
Osoitin: Osoitin ilmoitetaan * operaattorin kanssa.
Viite: Viite ilmoitetaan & operaattorin kanssa.
Osoitin: Osoittimen muuttuja edellyttää * -operaattorin poistamista.
Viite: Viitemuuttuja ei edellytä operaattorin purkamista.
Osoitin: Osoittimet voidaan alustaa nollaksi. Sellaisia muuttujia kutsutaan nollaosoittimiksi.
Viite: Viittauksia ei voi alustaa nollaksi. Ei ole sellaista asiaa kuin nollaviittaus. Viittauksen on aina viitattava objektiin.
Osoitin: Osoitinmuuttuja voidaan osoittaa uudelleen viitaamaan eri kohteisiin.
Viite: Viitemuuttujaa ei voida määrittää uudelleen. Se viittaa aina kohteeseen, jonka kanssa se alustettiin.
Osoitin: Osoitinmuuttujia tulisi käyttää, kun mahdollisuus viittaa mihinkään ei ole olemassa tai kun vaaditaan viittaamaan eri asioihin eri aikoina..
Viite: Viitemuuttujia tulisi käyttää, kun aina on objekti, johon viitataan, ja kun sitä ei tarvitse käyttää kyseistä viitemuuttujaa viitaamaan muuhun kuin kyseiseen esineeseen.
Osoitin: Osoitinmuuttujia voidaan käyttää algoritmien ja tietorakenteiden toteuttamiseen.
Viite: Viitemuuttujia voidaan käyttää funktioparametreissa, ja paluutyypit määrittelevät hyödylliset rajapinnat.
Osoitin: Ohjelmointikielet, kuten C, C ++, Pascal ja monet kokoonpanokielet tukevat osoittimia.
Viite: Ohjelmointikielet, kuten C ++, Java, Python, Perl, PHP, Ruby jne. Tukevat viitteitä.
Kuvan kohteliaisuus: “Osoittimet” Tämän tiedoston on luonut käyttäjä: SvenTranslation.Oma työ.Tämä vektorikuva on luotu Inkscapella. (CC BY-SA 3.0) Commonsissa -