Mutató

A Programozás Wiki wikiből

A programozásban mutatónak (pointer) hívunk egy olyan változót, amelynek tartalma egy memóriaterület címe.

Általában memóriaterületek, rekordok, objektumok, más változók tartalmának elérésére és módosítására használjuk őket.

Megkülönböztetünk típussal rendelkező és típus nélküli mutatókat. Előbbiek csak a típusuknak megfelelő típusú változók adatterületére mutathatnak.

Jelölések[szerkesztés]

A mutató által hivatkozott értéket a programnyelvekben általában a *, ^ jelekkel jelölik. Mutatott rekord mezői, mutatón keresztül elért objektum műveletei pedig a . vagy -> operátorok használatával hivatkozhatók. Egy változó címe (ami a mutatónak értékül adható) többnyire a &, vagy @ operátorok egyikével képezhető.

Bizonyos programnyelvek (Java, Object Pascal) elfedik a programozó elől, hogy az objektumok mutatókon keresztül érhetők el, ilyenkor az értékadás többnyire csak a hivatkozás másolását jelenti, a mutatott objektum mezői pedig a . operátorral érhetők el.

Használat[szerkesztés]

Azt a mutatót, ami (még) nem mutat valós adatra, többnyire 0 értékkel ajánlott feltölteni (inicializálni), és üres mutatónak (null pointer) hívják. A mutatóérték jelölésére a programnyelvek gyakran a null vagy nil szavakat használják. Üres mutató (feltételezett) adatterületének hivatkozása általában a program megszakadását (vagy kivétel dobását) eredményezi. Ez ellen úgy lehet védekezni, hogy mielőtt a mutatóval bármilyen műveletet végeznénk, előbb leellenőrizzük hogy annak értéke nem-e 0.

Dinamikus memóriafoglalásnál a lefoglalt memória egy mutatón keresztül érhető el. Általában a mutató által hivatkozott, és az azt követő terület címezhető, olvasható és módosítható.

Komolyabb rendszerek esetén, ha egy mutató olyan memóriaterületre mutat, ami a program számára nem címezhető, akkor a program megszakad, vagy kivétel lép fel. (Szegmentációs hiba) Gyakori gond ez olyan programnyelveknél, ahol a memóriafoglalás és felszabadítás a programozó felelőssége (C, Object Pascal). Bizonyos technikákkal ennek veszélye csökkenthető.

Egyes adatszerkezetek felépítésénél nélkülözhetetlenek, ilyen például a Láncolt lista, vagy a Lista

Mutatóaritmetika[szerkesztés]

Egyes nyelvek megengedik a mutatókon bizonyos aritmetikai műveletek elvégzését: mutató növelését/csökkentését egy egész számmal, illetve mutatók kivonását egymásból. Az első művelet a mutató tartalmát a megadott számú memóriacellával előrébb/hátrébb állítja, a második a két mutató értéke közötti cellák számát adja meg. (Egy cellának vagy egy bájtot, vagy az adott típus méretével egyenlő memóriaterületet szokás tekinteni.)

Az olyan mutatót, amelyiken nem végezhető mutatóaritmetika, referenciának szokás nevezni. Szigorú típusellenőrzés mellett, egy referencia nem hivatkozhat olyan memóriaterületre, amely neki nem megfelelő típusú értéket tartalmaz. A referenciák használata kevesebb hibalehetőséggel jár, mint a mutatóké. Egyes nyelvek megengedik, hogy egy referencia null értéket vegyen fel, és így nem érvényes memóriára hivatkozzon. Az ezt megengedő nyelvekben külön figyelmet kell szentelni a null referenciák kezelésének.