Kazalec proti nizu
Kazalec je podatkovni tip, ki vsebuje sklic na pomnilniško lokacijo (tj. spremenljivka kazalca shrani naslov pomnilniške lokacije, v kateri so shranjeni nekateri podatki). Nizi so najpogosteje uporabljena podatkovna struktura za shranjevanje zbirke elementov. Večina programskih jezikov nudi metode za preprosto deklariranje nizov in dostop do elementov v nizih.
Kaj je kazalec?
Kazalec je vrsta podatkov, ki shrani naslov pomnilniške lokacije, v kateri so shranjeni nekateri podatki. Z drugimi besedami, kazalec vsebuje sklic na pomnilniško lokacijo. Dostop do podatkov, shranjenih na pomnilniški lokaciji, na katero se sklicuje kazalec, se imenuje dereferenciranje. Pri izvajanju ponavljajočih se operacij, kot je prečkanje dreves/nizov, iskanje tabel itd., bi uporaba kazalcev izboljšala zmogljivost. To je zato, ker je dereferenciranje in kopiranje kazalcev cenejše kot dejansko kopiranje in dostop do podatkov, na katere kažejo kazalci. Ničelni kazalec je kazalec, ki ne kaže na nič. V Javi bi dostop do ničelnega kazalca ustvaril izjemo, imenovano NullPointerException.
Kaj je niz?
Na sliki 1 je prikazan del kode, ki se običajno uporablja za deklariranje in dodeljevanje vrednosti matriki. Slika 2 prikazuje, kako bi matrika izgledala v pomnilniku.
int vrednosti[5]; vrednosti[0]=100; vrednosti[1]=101; vrednosti[2]=102; vrednosti[3]=103; vrednosti[4]=104; |
Slika 1: Koda za deklariranje in dodeljevanje vrednosti matriki
100 | 101 | 102 | 103 | 104 |
Indeks: 0 | 1 | 2 | 3 | 4 |
Slika 2: Matrika, shranjena v pomnilniku
Zgornja koda definira matriko, ki lahko shrani 5 celih števil in do njih se dostopa z uporabo indeksov od 0 do 4. Ena od pomembnih lastnosti matrike je, da je celotna matrika dodeljena kot en blok pomnilnika in vsak element dobi svoj svoj prostor v nizu. Ko je matrika definirana, je njena velikost fiksna. Torej, če niste prepričani o velikosti matrike v času prevajanja, bi morali definirati dovolj veliko matriko, da boste na varni strani. Toda največkrat bomo dejansko uporabili manj elementov, kot smo jih dodelili. Tako je precejšnja količina pomnilnika dejansko izgubljena. Po drugi strani pa, če »dovolj velik niz« dejansko ni dovolj velik, bi se program zrušil.
Kakšna je razlika med kazalci in nizi?
Kazalec je podatkovni tip, ki shrani naslov pomnilniške lokacije, v kateri so shranjeni nekateri podatki, medtem ko so polja najpogosteje uporabljena podatkovna struktura za shranjevanje zbirke elementov. V programskem jeziku C se indeksiranje matrike izvaja z uporabo aritmetike kazalca (tj. i-ti element matrike x bi bil enakovreden (x+i)). Zato si lahko v C nabor kazalcev, ki kažejo na nabor zaporednih pomnilniških lokacij, predstavljamo kot polje. Poleg tega obstaja razlika v tem, kako operator sizeof deluje na kazalcih in nizih. Ko se uporabi za matriko, bo operator sizeof vrnil celotno velikost matrike, medtem ko bo uporabljen za kazalec, vrne samo velikost kazalca.