C (++) stílusú nyelvbe mi értelme van a mutatóknak?
Csak a mutatókról, és azok használatáról lehetne egy külön könyvet írni. A mutatók egyik legalapvetőbb lényege, hogy anélkül kezelhetsz nagyméretű struktúrákat, hogy az egész struktúrát másolgatnod kéne. Ahelyett, hogy egy függvénynek megadnál egy gigászi méretű állományt, amit lemásol magának lokális változónak, szimplán megadhatsz egy mutatót, ami csupán a memóriacímet tárolja, ahol azt megtalálod. És így a mutatón keresztül elérheted ugyanazt az (erdeti) állományt, fölösleges memóriapocsékolás nélkül. A referencia lényegében ugyanerre jó, azzal a különbséggel, hogy a pointernek módosítani tudod az értékét (vagyis, hogy milyen memóriacímre mutasson), míg a referencia mindig ugyanarra a változóra fog mutatni. Ez a lehetőség szintén a kezedbe ad további eszközöket, pl egy láncolt listás szerkezet megvalósíthatatlan lenne enélkül.
A pointerek jelentősége elég sokrétű, memóriakezelés, program absztrakció, mindenhol megvan a maga szerepe. Egy érdekes hasonlat lehet mondjuk a felhasználóneved egy oldalon. Hasonlóféleképpen működik, mint egy pointer a programozásban, ahelyett, hogy a teljes profilodat, minden adattal elküldenéd mindenkinek, akit érdekel, szimplán megadhatod nekik a felhasználóneved, ami alapján meg tudják az emberek keresni a profilodat, amin a további adataid vannak. A felhasználóneved rámutat a profilodra. A pointerek is hasonló elven működnek, és a hasnosságuk is jobban látszik talán ezen keresztül.
Gondolj arra, hogy mondjuk egy függvénynek dolgoznia kell valamilyen adaton, mondjuk egy tömbön vagy struktúrán. Hogy adod meg neki az adatokat? Ahogy fentebb írták, nem másolhatod be mindig a stack-be az egészet, mint paramétert, mert kikönyököl a memóriából, időigényes (igen, ez is szempont lehet), vissza is kell írni valahogy, stb.
Egyébként a proci (vagy assembly) úton-útfélen memóriacímekkel dolgozik, a C pedig elég gépközeli nyelv. Általában akkor is mutatókat használsz, amikor egy magasabb szintű nyelvben ezt észre sem veszed. Sőt, C-ben sem mindig, pl. egy tömb (akár string) változó is valójában pointer, csak nincs annyira elrejtve a programozó elől, mint mondjuk a Java vagy Python nyelvben.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!