Osoitin vs Array
Osoitin on tietotyyppi, jolla on viittaus muistipaikkaan (ts. Osoitinmuuttuja tallentaa muistipaikan osoitteen, johon jotkut tiedot on tallennettu). Matriisit ovat yleisimmin käytetty tietorakenne elementtikokoelman tallentamiseen. Useimmat ohjelmointikielet tarjoavat menetelmiä matriisien ja pääsyelementtien ilmoittamiseen matriiseissa.
Mikä on osoitin?
Osoitin on tietotyyppi, joka tallentaa osoitteen muistipaikkaan, johon jotkut tiedot on tallennettu. Toisin sanoen osoittimessa on viittaus muistipaikkaan. Osoittimen viittaamaan muistipaikkaan tallennettujen tietojen käyttöä kutsutaan alijohdoksi. Kun suoritetaan toistuvia toimintoja, kuten puiden / merkkijonojen kulkeminen, taulukoiden haku jne., Osoittimien käyttö parantaisi suorituskykyä. Tämä johtuu siitä, että viittausten viittaaminen ja kopioiminen on halvempaa kuin osoittimien osoittamien tietojen todellinen kopioiminen ja käyttäminen. Nollaosoitin on osoitin, joka ei osoita mitään. Java-ohjelmassa tyhjän osoittimen käyttäminen synnyttäisi poikkeuksen nimeltä NullPointerException.
Mikä on taulukko?
Kuvassa 1 on koodikappale, jota käytetään tyypillisesti taulukon ilmoittamiseen ja määrittämiseen. Kuva 2 kuvaa, kuinka taulukko näyttäisi muistissa.
arvot [0] = 100; arvot [1] = 101; arvot [2] = 102; arvot [3] = 103; arvot [4] = 104; |
Kuva 1: Koodi arvojen ilmoittamiseen ja osoittamiseen taulukolle
100 | 101 | 102 | 103 | 104 |
Hakemisto: 0 | 1 | 2 | 3 | 4 |
Kuva 2: Muistiin tallennettu taulukko
Koodin yläpuolella määritetään taulukko, johon voi tallentaa 5 kokonaislukua, ja niihin pääsee indekseillä 0–4. Taulukon yksi tärkeä ominaisuus on, että koko matriisi varataan yhtenä muistilohkona ja jokainen elementti saa oman tilansa matriisissa. Kun matriisi on määritelty, sen koko on kiinteä. Joten jos et ole varma taulukon koosta kääntämisajankohtana, joudut määrittelemään tarpeeksi suuren taulukon ollaksesi turvallisella puolella. Mutta useimmiten aiomme käyttää vähemmän elementtejä kuin olemme jakaneet. Joten huomattava määrä muistia on todella hukkaan. Toisaalta, jos”riittävän suuri taulukko” ei ole oikeastaan tarpeeksi suuri, ohjelma kaatuu.
Mitä eroa on osoittimilla ja matriiseilla?
Osoitin on tietotyyppi, joka tallentaa muistipaikan osoitteen, johon osa tiedoista on tallennettu, kun taas matriisit ovat yleisimmin käytetty tietorakenne elementtikokoelman tallentamiseen. C-ohjelmointikielellä taulukon indeksointi tapahtuu osoittimen aritmeettisesti (eli taulukon x: n elementti x vastaisi *: ta (x + i)). Siksi C: ssä joukko osoittimia, jotka osoittavat sarjaan muistipaikkoja, jotka ovat peräkkäisiä, voidaan ajatella matriisina. Lisäksi on eroa siinä, kuinka operaattorin koko toimii osoittimissa ja taulukoissa. Taulukkoon sovellettuna operaattorin sizeof palauttaa koko matriisin koon, kun taas osoittimeen kohdistettuna se palauttaa vain osoittimen koon.