Mis on osutite massiiv?

Osutite massiiv on standardne massiivi andmetüüp, mis sisaldab andmetüüpidele adresseeritud mälujada, mitte aga muid skalaarseid tüüpe, nagu täisarvud või ujukomaarvud. Osutajate massiivi kasutades saab programm omada massiivi peaaegu igast andmetüübist, andmestruktuurist, klassist või isegi funktsioonist. Võimalik on ka osutite massiivi tõhus sorteerimine, nii et soovi korral saab aadresse joondada vastavalt nende füüsilisele asukohale arvutimälus. Osutajate massiivi kasutamisega seotud tüsistused seisnevad selles, et andmeid saab kergesti rikkuda ja osutatavate andmete tüüpi tuleb mälu ületäitumise probleemide vältimiseks sisemiselt hallata.

Kõik programmeerimiskeeled ei võimalda vihjete massiivi, nagu kontseptsioon algselt välja mõeldud. Kõrgetasemelised keeled, mis automatiseerivad mäluhaldust, ei kasuta viiteid samal viisil kui madalama taseme keeled, kuigi tehniliselt on kõrgetasemeline klassiobjektide massiiv, objektorienteeritud keel on osutite massiiv; isegi nii ei saa neid samal viisil kasutada ega nendega manipuleerida. Madala tasemega keeles sisaldab massiiv tegelikult täisarvu, mis on mälukuhja kursori otseaadress. Enamikus kõrgetasemelistes keeltes pole see funktsioon võimalik, kuigi on olemas alternatiivsed paradigmad.

Üks aspektidest, mis muudab vihjete massiivi programmeerimistööriistana väärtuslikuks, on see, et viidad võivad viidata mis tahes tüüpi saadaolevatele andmetele. Kursor on omaette andmetüüp, kuigi selle ainus eesmärk on osutada teisele andmetüübile. See tähendab, et osutite massiiv võib tegelikult sisaldada samas massiivis erinevaid andmetüüpe, kuigi programmil peab olema mehhanism, et jälgida, millele iga osuti viitas.

Osutite võimas aspekt on see, et need võivad tegelikult osutada mälus olevale kompileeritud programmikoodile. See võimaldab massiivil osutada funktsioonidele, mitte ainult andmetele. Funktsioonide hulk võib võimaldada koodi dünaamilist numbrilist viitamist. See võib olla kasulik keeletõlgi või muud tüüpi tarkvara programmeerimisel, mis vajab teatud funktsioonide kutsumist ettearvamatu sisendi põhjal, ilma et oleks vaja suuri tingimuslauseid, näiteks lülitusplokke.

Mõned kursoriandmete massiiviga seotud probleemid on aadressi kaotamise võimalus, selle mälu hilisema vabastamise vältimine ja võimalus, et aadress võib tahtmatu toimingu, näiteks lisamise, rikkuda. Vale aadressi juurde pääsemise katsed võivad põhjustada rikutud andmete lugemist või äärmuslikel juhtudel, näiteks ebaõnnestunud lähtestamisel, segmenteerimisvea, mis võib põhjustada programmi ootamatu lõpetamise. Ettevaatlik programmeerimine võib aidata nende sündmuste võimalust vähendada.