Što je niz pokazivača?

Niz pokazivača je standardni tip podataka niza koji sadrži slijed memorije adresiran na tipove podataka za razliku od drugih skalarnih tipova kao što su cijeli brojevi ili brojevi s pomičnim zarezom. Koristeći niz pokazivača, program može imati niz gotovo bilo koje vrste podataka, strukture podataka, klase ili čak funkcije. Također je moguće i učinkovito sortiranje niza pokazivača tako da se, po želji, adrese mogu poravnati prema njihovoj fizičkoj lokaciji u memoriji računala. Neke od komplikacija u korištenju niza pokazivača su da se podaci mogu lako oštetiti i da se vrstom podataka na koje se ukazuje treba interno upravljati kako bi se spriječili problemi s preljevom memorije.

Ne dopuštaju svi programski jezici niz pokazivača kako je koncept izvorno zamišljen. Jezici visoke razine koji automatiziraju upravljanje memorijom ne koriste pokazivače na isti način kao jezici niže razine, iako je tehnički niz objekata klase na visokoj razini, objektno orijentirani jezik niz pokazivača; čak i tako, njima se ne može koristiti ili manipulirati na isti način. U jeziku niske razine, niz će zapravo sadržavati cjelobrojnu vrijednost koja je izravna adresa pokazivača u hrpi memorije. U većini jezika visoke razine ova funkcionalnost nije moguća, iako postoje alternativne paradigme.

Jedan od aspekata koji čini niz pokazivača vrijednim kao alat za programiranje je da pokazivači mogu referencirati bilo koju vrstu dostupnih podataka. Pokazivač je sam po sebi tip podataka, iako je njegova jedina svrha da pokaže na drugu vrstu podataka. To znači da niz pokazivača zapravo može sadržavati različite tipove podataka u istom nizu, iako bi program trebao imati mehanizam za praćenje na što svaki pokazivač upućuje.

Snažan aspekt pokazivača je da oni zapravo mogu ukazivati ​​na prevedeni programski kod u memoriji. To omogućuje nizu da ukazuje na funkcije, a ne samo na podatke. Niz funkcija može omogućiti dinamičko numeričko referenciranje koda. Ovo može biti korisno pri programiranju jezičnog tumača ili druge vrste softvera koji treba pozvati određene funkcije na temelju nepredvidivog unosa bez potrebe za velikim uvjetnim izrazima kao što su blokovi prekidača.

Neki problemi koje predstavlja niz podataka pokazivača su mogućnost gubitka adrese, sprječavanje kasnijeg oslobađanja te memorije i mogućnost da se adresa može oštetiti nenamjernom operacijom kao što je dodavanje. Pokušaji pristupa netočnoj adresi mogli bi dovesti do čitanja oštećenih podataka ili, u ekstremnim slučajevima kao što je neuspješna inicijalizacija, pogreške segmentacije koja bi mogla uzrokovati neočekivani prekid programa. Oprezno programiranje može pomoći u smanjenju mogućnosti ovih događaja.