Kursor vs massiiv
Kursor on andmetüüp, mis sisaldab viidet mälupesale (st kursori muutuja salvestab aadressi mälupesale, kuhu mõned andmed on salvestatud). Massiivid on elementide kogu salvestamiseks kõige sagedamini kasutatav andmestruktuur. Enamik programmeerimiskeeli pakub meetodeid massiivide ja massiividele juurdepääsu elementide hõlpsaks deklareerimiseks.
Mis on osuti?
Kursor on andmetüüp, mis salvestab mälu asukoha aadressi, kuhu osa andmeid on salvestatud. Teisisõnu, osutil on viide mälukohale. Juurdepääsu andmetele, mis on talletatud mälu asukohta, millele osutaja osutab, nimetatakse alamtõmbeks. Korduvate toimingute tegemisel, näiteks puude / nööride läbimine, tabelite otsimine jne, parandaks näitajate kasutamine jõudlust. Selle põhjuseks on asjaolu, et osutite viitamine ja kopeerimine on odavam kui tegelikult osutajate poolt kopeeritud andmete juurde pääsemine ja neile juurdepääs. Nullkursor on osuti, mis ei osuta millelegi. Java-s tekitaks nullkursori juurde pääsemine erandi nimega NullPointerException.
Mis on massiiv?
Joonisel 1 on kooditükk, mida tavaliselt kasutatakse massiivi väärtuste deklareerimiseks ja määramiseks. Joonisel 2 on kujutatud, kuidas massiiv mälus välja näeks.
väärtused [0] = 100; väärtused [1] = 101; väärtused [2] = 102; väärtused [3] = 103; väärtused [4] = 104; |
Joonis 1: Massiivi väärtuste deklareerimise ja määramise kood
100 | 101 | 102 | 103 | 104 |
Indeks: 0 | 1 | 2 | 3 | 4 |
Joonis 2: Mällu salvestatud massiiv
Koodi kohal määratletakse massiiv, kuhu saab salvestada 5 täisarvu ja neile pääseb juurde indeksite 0 kuni 4 abil. Massiivi üks oluline omadus on see, et kogu massiiv eraldatakse ühe mäluplokina ja iga element saab massiivis oma ruumi. Kui massiiv on määratletud, on selle suurus fikseeritud. Nii et kui te pole kompileerimise ajal massiivi suuruses kindel, peaksite turvalise külje jaoks määrama piisavalt suure massiivi. Kuid enamasti kasutame tegelikult vähem elemente, kui oleme eraldanud. Nii et arvestatav hulk mälu läheb tegelikult raisku. Teisalt, kui “piisavalt suur massiiv” pole tegelikult piisavalt suur, kukuks programm kokku.
Mis vahe on osutitel ja massiividel?
Kursor on andmetüüp, mis salvestab mälu asukoha aadressi, kuhu osa andmeid on salvestatud, samas kui massiivid on kõige sagedamini kasutatav andmestruktuur elementide kogu salvestamiseks. C-programmeerimiskeeles toimub massiivi indekseerimine kursori aritmeetika abil (st massiivi i-s element oleks samaväärne * (x + i)). Seetõttu võib C-s pidada massiiviks osutajate komplekti, mis osutab järjestikustele mälupaikade komplektile. Lisaks on erinevus selles, kuidas operaatori suurus osutitel ja massiividel töötab. Massiivile rakendamisel tagastab operaatori sizeof massiivi kogu suuruse, samas kui osutile rakendatuna tagastab see lihtsalt kursori suuruse.