C - ami azt jelenti, „hivatkozás feloldási” egy mutatót
Áttekintés a legfontosabb szakkifejezéseket
Különböző számítógépes nyelvek különböző jelölések mondja a fordító vagy tolmács akkor most érdekel ebben az értelemben - fókuszálok alatt a C és C ++ nyelven.
pointer forgatókönyv
Tekintsük C, jelezve a mutatót, például egy rövid szénláncú p.
mutató hivatkozás feloldási
Ahhoz, hogy olvassa el a szimbólumok a p pont, keresünk p egyikét használja ezeket a szimbólumokat (ismét C):
Azt is mozgatni a mutatót az adatokat mutatott játszva őket útközben:
Ha adatokat lehet rögzíteni, akkor tegye a következőket:
Azonosítás visszahivatkozási és az adatokhoz való hozzáférés szerkezet tag
A C, kivéve, ha van egy változó, amely egy mutató a szerkezet adatelemek, akkor kap hozzáférést ezekhez a tárgyakhoz használatával a kezelő -> dereference:
Multi-os adattípusok
Ahhoz, hogy a mutató, a számítógépes program is szükség van némi megértést a típusú adatok, amelyekre hivatkozunk - ha egynél több bájt szükséges az ilyen típusú adatok bemutatása, akkor az index általában azt jelzi, az alacsony byte az adatokat.
Így nézett egy bonyolultabb példa:
Mutatók dinamikusan allokált memóriát
A C ++, a memória kiosztás jellemzően egy üzemeltető, és az új kiadás révén törlés:
Lásd. Azt is okos mutató C ++ alább.
a mutató gyakran az egyetlen jel, amely tárolja egyes adatok vagy a buffer. Ha szükséges folyamatos használata az adatok / puffer vagy arra, hogy hívja a free () vagy törölheti. Kerülendő memóriavesztés, akkor a programozó kell dolgozni egy példányát a mutatót.
vagy gondosan megtervezni eltörlését az esetleges változásokról.
A C ++, akkor a legjobb, ha egy okos mutató tárgyak tárolására mutatók és menedzsment, a gép automatikusan kioldja őket destruktorok smart pointerek munkát. Mivel a C ++ 11 standard könyvtár biztosít két, unique_ptr. ha van egy tulajdonos, hogy a kijelölt objektumot.
null mutató
C és C ++, valamint a beépített numerikus típusok nem feltétlenül kell az alapértelmezett 0 érték helyett bools hamis. mutatók nem mindig egyenlő a NULL. Ezek mind állítva 0 / hamis / NULL, ha azok statikus vagy változó (csak a C ++) közvetlen vagy közvetett tagja változó statikus objektumok vagy bázisok vagy vizsgált nulla inicializálás (például új T (); és az új T (x , y, z); működnek nulla -initsializatsiya tagja T, pointereket tartalmazza, míg az új T; nincs).
Pontosabban, az inicializált mutató tartani bit-minta azonosítására vagy NULL. vagy (gyakran virtuális).
Például, int *. inicializálása, hogy pont egy változó int. lehet - az öntés után float * -, hogy hozzáférjen az értéket «GPU» memória, teljesen eltér a változó int. majd kattintás után a mutató funkciója vonatkozhat külön memória, amely a műveleti kódokat a funkciót.
3GL programozási nyelvek, mint a C és C ++, általában elrejti ezt a komplexitást, mint például:
Ha a fordító ad egy mutató egy változó vagy függvény, akkor játszani szabadon (mindaddig, amíg a változó megsemmisül / megjelent az időközben), és ez a probléma a fordító, mint például. Meg kell visszaállítani egy bizonyos előre meghatározott nyilvántartás egy külön CPU vagy számítógépes utasításokat a parancs
Próbálja mozgatni a jogi mutatók túl ezeket a határokat, vagy rendeljen bármilyen számot vagy használt megjelölések kapcsolódó mutatók független típusok általában meghatározatlan viselkedés. így ez kerülni kell a könyvtárakban és az alkalmazások egy magasabb szinten, hanem az OS-kódot, eszközmeghajtók, stb Lehet, hogy hivatkozhat a viselkedését a bal Undefined a C vagy C ++, ami soha nem a konkrét eszközök kerültek egyértelműen meghatározott.
Dereference művelet kezdődik a mutatót, és követi annak nyilat, hogy hozzáférjen az index. A cél lehet kilátás az állam a deszka vagy állapotának megváltoztatásához egy ugródeszka. mutató hivatkozás feloldási művelet csak ha a mutató Pointee - pont kell felosztani, és a mutatót kell beállítani, hogy pont ezt. A leggyakoribb hiba a kódban mutató elfelejtett alapján létrehozott elemet. A leggyakoribb, mert ez a hibakód egy rossz dereference működését. A Java helytelenül dereference jóvoltából rendszer futás közben. Az összeállított nyelvek, mint a C, C ++ és Pascal, helytelen dereference Néha összeomlik, és máskor a memória megsérült valami finom, hétköznapi módon. pointer hibák összeállított nyelveken is nehéz nyomon követni, mert e.
Egyszerűbben fogalmazva, az azt jelenti, dereference hozzáférni az érték egy adott memória mutatott hely a mutatót.
Ugyanakkor tudjuk dereference a mutató nem fér hozzá az értéket, amely azt hangsúlyozza. Például:
Mi dereference NULL pointer nem férnek hozzá annak költségét. Vagy csinálhatunk:
Ismét visszahivatkozási, de soha nem az az érték. Ez a kód nem fog összeomlani: Összeomlás történik, ha valóban kap hozzáférést az adat érvénytelen mutató. Azonban, sajnos, szabvány szerint dereference érvénytelen mutató nem definiált (néhány kivételtől eltekintve), még akkor is, ha nem próbálja megérinteni a bizonyítékokat.
Röviden, dereference a mutató hivatkozás feloldási operátor alkalmazását jelenti. Ez az állítás egyszerűen visszaadja az L-értéket a későbbi használatra.