Osoitin vs. array
Osoitin on tietotyyppi, joka sisältää viittauksen muistipaikkaan (eli osoitinmuuttuja tallentaa sen muistipaikan osoitteen, johon on tallennettu joitakin tietoja). Taulukot ovat yleisimmin käytetty tietorakenne elementtikokoelman tallentamiseen. Useimmat ohjelmointikielet tarjoavat menetelmiä, joilla voit helposti ilmoittaa taulukoita ja käyttää taulukoiden elementtejä.
Mikä on osoitin?
Osoitin on tietotyyppi, joka tallentaa osoitteen muistipaikasta, johon on tallennettu joitakin tietoja. Toisin sanoen osoitin sisältää viittauksen muistipaikkaan. Osoittimen viittaamaan muistipaikkaan tallennettujen tietojen käyttöä kutsutaan viittauksen purkamiseksi. Kun suoritat toistuvia toimintoja, kuten puiden/merkkijonojen läpikulkua, taulukkohakuja jne., osoittimien käyttö parantaisi suorituskykyä. Tämä johtuu siitä, että osoittimien viittausten poistaminen ja kopioiminen on halvempaa kuin osoittimien osoittaman tiedon kopioiminen ja käyttäminen. Nollaosoitin on osoitin, joka ei osoita mihinkään. Javassa nollaosoittimen käyttäminen luo poikkeuksen, jota kutsutaan NullPointerExceptioniksi.
Mikä on taulukko?
Kuvassa 1 on koodinpätkä, jota käytetään tyypillisesti taulukon arvojen ilmoittamiseen ja määrittämiseen. Kuva 2 esittää, miltä matriisi näyttäisi muistissa.
int arvot[5]; values[0]=100; arvot[1]=101; arvot[2]=102; arvot[3]=103; arvot[4]=104; |
Kuva 1: Koodi arvojen ilmoittamiseen ja määrittämiseen taulukolle
100 | 101 | 102 | 103 | 104 |
Hakemisto: 0 | 1 | 2 | 3 | 4 |
Kuva 2: Muistiin tallennettu taulukko
Yllä oleva koodi määrittelee taulukon, johon voi tallentaa 5 kokonaislukua ja niihin päästään indekseillä 0 - 4. Yksi tärkeä taulukon ominaisuus on, että koko taulukko on varattu yhdeksi muistilohkoksi ja jokainen elementti saa omansa. omaa tilaa taulukossa. Kun taulukko on määritetty, sen koko on kiinteä. Joten jos et ole varma taulukon koosta käännöshetkellä, sinun on määritettävä riittävän suuri taulukko ollaksesi turvassa. Mutta useimmiten aiomme itse asiassa käyttää vähemmän elementtejä kuin olemme osoittaneet. Joten huomattava määrä muistia menee hukkaan. Toisa alta, jos "riittävän suuri joukko" ei itse asiassa ole tarpeeksi suuri, ohjelma kaatuu.
Mitä eroa on osoittimilla ja taulukoilla?
Osoitin on tietotyyppi, joka tallentaa osoitteen muistipaikalle, johon on tallennettu joitakin tietoja, kun taas taulukot ovat yleisimmin käytetty tietorakenne elementtikokoelman tallentamiseen. C-ohjelmointikielessä taulukon indeksointi tehdään osoitinaritmetiikkaa käyttäen (eli taulukon x i:s elementti vastaisi (x+i)). Siksi C:ssä joukko osoittimia, jotka osoittavat joukkoon peräkkäisiä muistipaikkoja, voidaan ajatella taulukona. Lisäksi on eroa siinä, kuinka koko-operaattori toimii osoittimissa ja taulukoissa. Kun sitä käytetään taulukkoon, sizeof-operaattori palauttaa taulukon koko koon, kun taas osoittimeen käytettynä se palauttaa vain osoittimen koon.