Mielőtt megvitatnánk a mutató és a referencia közötti különbséget, először röviden nézzük meg e két kifejezés jelentését. Egy programban az adatok memóriát foglalnak el. A memória pontos helyét, amelybe az adatokat egy végrehajtási időpontban helyezték el, tudni kell azok eléréséhez. Mutató változók és referenciaváltozók ezekhez az adatokhoz férnek hozzá, és manipulálják a memóriacímeket, amelyekben vannak. Vagyis mind a mutatók, mind a hivatkozások felhasználhatók objektumok közvetett hivatkozására. Alapvetõen memóriacímeket tartanak értékként. Az kulcs különbség egy mutató és egy hivatkozás között ez egy mutató olyan változó, amely egy másik változó memóriahelyének címét tárolja míg a a referencia egy változó, amely egy másik változóra utal. A két mechanizmus, az mutató és a referencia, eltérő szintaxissal és felhasználással rendelkeznek.
Egy mutató van programozási nyelvi objektum, amely tárolja az érték memóriacímét a számítási memóriában.
int i = 5;
int * ptr = & i;
Az első sor az 5-ös értékkel inicializált változót határozza meg. A második sor a változó memóriacímét mutató mutatót határoz meg. Itt a 'ptr' objektumot az 'pointer to int' típusú objektumnak deklarálják, amelynek kezdeti értéke az i objektum címe. Alapvetően a ptr változó az i-re mutat a memóriacím tárolásával.
Felhívjuk a memóriahelyen tárolt érték megszerzésére visszahivatkozási. A * operátort arra használják, hogy a mutatót levonják. A nyilatkozatok elkészítése után a * ptr indirekt kifejezés ptr utal az i-re.
Az i érték megváltoztatásához a következő hozzárendelés használható;
* ptr = 20;
A mutatókat újra lehet rendelni, hogy különféle tárgyakra is hivatkozzanak.
A null mutató egy speciális mutató típus. A nullmutatót gyakran 0 vagy null jelöli, és semmit nem mutat. Jó gyakorlat a nullmutató használata abban az esetben, ha nincs pontos cím, amelyet a mutatóhoz hozzá kell rendelni. Ez a hozzárendelés logikai műveletekben és feltételekben használható.
Mutatók lehetnek a dinamikusan kiosztott memória címeinek tárolására és kezelésére szolgál. Az adatszerkezetek, például a halmok, a sorok és a listák végrehajtása és ellenőrzése hatékonysá válhat a mutatók használatával. Például egy sornak két mutatója lehet; fej mutató és farok mutató. A mutatók arra is felhasználhatók, hogy a változókat címeikkel átadják, ami lehetővé tenné az érték megváltoztatását. A memória vagy a memóriával leképezett eszközök közvetlen kezelése mutatók segítségével is kezelhető.
A mutatók védett és nem védett hozzáférést tesznek lehetővé a címzett memóriához. Ezért szükséges óvintézkedéseket kell tenni annak ellenőrzésére, hogy a mutató tartalma érvényes-e. Ellenkező esetben az érvénytelen memóriacímmel rendelkező mutató hivatkozásának megszüntetése a program összeomlását okozhatja.
A mutatókat olyan nyelveken támogatják, mint a C, C ++, a Pascal és sok más nyelven.
Mutató egy a változóhoz társított memória címre mutatva b.
A hivatkozás egyszerűen egy alternatív azonosító a memóriában tárolt értékhez. Ez lehetővé teszi a program számára, hogy közvetett módon hozzáférjen egy adott nullapontra.
int i = 5;
int & ref = én;
Az első sor az 5-ös értékkel inicializált változót határozza meg. A második sor a „ref” -et az „int int” típusú objektumnak deklarálja, amely i-re utal. A referencia különbözik magától az adattól, mivel a referencia a memóriában tárolt adott nullapont fizikai címeként valósul meg.
Miután meghatároztuk, a referencia nem adható hozzá új értékhez. A hivatkozás mindig arra az objektumra vonatkozik, amelyhez inicializálva van. A következő hozzárendelésben a ref továbbra is i-re utal, de az érték most 20.
ref = 20;
A fenti példa szerint a hivatkozások levonása nem igényel operátorokat.
A hivatkozások akkor használhatók, ha a változó mindig egy objektumra utal. Ennek oka az, hogy a mutatókkal ellentétben a hivatkozások nem lehetnek nullák, és az inicializáláskor mindig hozzá kell rendelni. Mivel a hivatkozásoknak mindig utalniuk kell valamilyen objektumra, egy ilyen változó referenciává tétele biztosítja a program hatékony és helyes működését. Mivel nincs nulla hivatkozás, a referenciaváltozó érvényességét nem kell tesztelni.
Referenciaváltozók lehetnek arra használják, hogy a nagy adatokat hatékonyan továbbítsák érvekként az eljárásokhoz. A hivatkozásokat a nagy adatok megosztásakor a különféle kódterületek között is használják, mivel az egyes kódok hivatkoznak az adatokra.
A programozási nyelvek, például a C ++, a Java, a Python, a Perl, a PHP, a Ruby stb. Támogatják a referenciákat.
Mutató: A mutató a számítási memóriában tárolt objektum memóriacíme.
Referencia: A referencia egy objektum alternatív azonosítója vagy álneve.
Mutató: A mutatót a * operátor deklarálja.
Referencia: A referencia deklarálva van az & operátorral.
Mutató: A mutatóváltozó megköveteli a * operátor hivatkozásának elvetését.
Referencia: A referenciaváltozó megköveteli, hogy egyetlen operátort sem vonják le.
Mutató: A mutatók nullára inicializálhatók. Az ilyen változókat nullmutatóknak nevezzük.
Referencia: A hivatkozások nem nullázhatók. Null hivatkozás nincs. A hivatkozásnak mindig tárgynak kell lennie.
Mutató: Egy mutatóváltozót újra lehet rendelni, hogy különféle objektumokra hivatkozzon.
Referencia: A referenciaváltozót nem lehet újra hozzárendelni. Mindig arra az objektumra utal, amellyel inicializálták.
Mutató: A mutatóváltozókat akkor kell használni, ha létezik a semmire való hivatkozás lehetősége, vagy amikor különféle dolgokra kell hivatkozni különböző időpontokban..
Referencia: A referenciaváltozókat akkor kell használni, ha mindig lesz egy utánozandó objektum, és ha nem kell ezt a referenciaváltozót másra, az objektumra való hivatkozásra használni.
Mutató: A mutatóváltozók felhasználhatók algoritmusok és adatszerkezetek megvalósítására.
Referencia: A referenciaváltozók felhasználhatók a funkcióparaméterekben, a visszatérési típusok pedig a hasznos interfészeket határozzák meg.
Mutató: A programozási nyelvek, például a C, C ++, a Pascal és számos összeszerelési nyelv támogatják a mutatókat.
Referencia: A programozási nyelvek, például a C ++, a Java, a Python, a Perl, a PHP, a Ruby stb. Támogatják a referenciákat.
Kép jóvoltából: „Pointers” - Ezt a fájlt a felhasználó készítette: SvenTranslation.Saját munka.Ez a vektorkép az Inkscape (CC BY-SA 3.0) segítségével készült a Commons segítségével -