Különbség a C ++ referencia és a mutató között

Bár a C ++ mutató hivatkozás hasonlónak tűnik, szignifikáns különbség van mind a C ++ referencia, mind a mutató között. A referenciaváltozó egy másik névként mondható meg egy létező változó számára. Amint ez a változó inicializálva van, a változó neve utalhat egy másik változóra. A mutatók viszont olyan változók, amelyek egy változó címét tárolják. Mint minden változót, ezeket először deklarálják, majd minden változó címe tárolható bennük. Vessen egy pillantást az alábbiakban részletesebben a C ++ referencia és a mutató közötti különbségekre.

A fej + fej összehasonlítás a C ++ referencia és mutató között (Infographics)

Az alábbiakban látható a 7 legmagasabb különbség a C ++ referencia és a mutató között

A C ++ referencia és a mutató közötti különbségek

Mindkét C ++ referencia vs mutató népszerű választás a piacon; beszéljünk a C ++ referencia és a mutató közötti fő különbségről:

A C ++ referencia és a mutató közötti fő különbség az, hogy az egyik másik változóra utal, míg az utóbbi a változó címét tárolja. A hivatkozások nem változtatnak meg az eredeti változóban, míg a mutató megváltoztatása esetén ez befolyásolja az eredeti változót. A hivatkozást be kell inicializálni a deklarálás során, miközben nem szükséges a mutatót inicializálni, ha azt deklarálják. Mutatók tömbje hozható létre, míg referenciák tömbje nem hozható létre. A null értéket nem lehet hozzárendelni a referenciahoz, de hozzá lehet rendelni egy mutatóhoz.

C ++ referencia vs mutató összehasonlító táblázat

A C ++ referencia és a mutató elsődleges összehasonlítását az alábbiakban tárgyaljuk:

Az összehasonlítás alapja a C ++ referencia és a mutató közöttC ++ referenciaMutató
változókA hivatkozás meglévő változó álnévének mondható. Ennek a változónak a fő használata paraméterként működik, amely átadási referenciaként működik. Ezt átadják egy függvénynek. A függvény, amelyhez ezt átadják, az eredeti változón működik, a másolás helyett értékben. A funkción belül elvégzett változások kívülről is tükröződnek.A mutatóváltozók olyan változók, amelyek tárolják a címet. A szokásos változóktól eltérően, mint például az int, double és char, a memóriacímeket tárolja. A programozás megkönnyítése érdekében szükség van erre a változóra. Ez egy változó, amely képes tárolni egy adott típusú értéket.
NyilatkozatA C ++ referenciaváltozó deklarálása a '&' szimbólum hozzáadásával történik a változó elé. Ha kifejezéssel használják, akkor azt jelenti, hogy operátor címeként működik. Egy másik név megadására szolgál egy meglévő változó számára.
Szintaxis:
írja be a & newName = olemasolevaName ;
// vagy
írja be a & newName = olemasolevaName ;
// vagy
írja be a & newName = olemasolevaName ;
Például:
/ * A teszt referencianyilatkozata és inicializálása * /
#include
névtér std;
int main () (
húr neve = “Priya”; // Nyilatkozzon egy név nevű karakterláncváltozóról
string & refName = name; // Nyilatkozzon hivatkozást (álnevet) a változó nevére
// A refName és a név egyaránt a „Priya” értékre utalnak
cout << név << endl; // Kiírja a „Priya” változó értékét
cout << refName << endl; // Kiírja a „Priya” referenciaértékét
Most változtassa meg a Név értékét
refName = „Karishma”; // Új értéket rendeljen hozzá a refName-hez
cout << refName << endl;
cout << név << endl; // A szám értéke a “Karishma” -ot is megváltoztatja
név = “Snehal”; // Új nevet rendeljen hozzá a névhez
cout << namer << endl;
cout << refName << endl; // A refName értéke szintén megváltoztatja a „Snehal” értéket.
)
Ez azt jelenti, hogy a referenciaváltozó értékei megváltoztathatók a változó eredeti és másolatában.
Mielőtt a kurzort a program bármely pontján felhasználná, azt előre be kell jelenteni. Egy mutató deklarálására és a rendszer tudomására hozataláról, hogy egy mutató, egy változó előtagja egy "*" előtag. A mutatóhoz adattípus tartozik, amely lehet int vagy dupla, stb.
Szintaxis:
típus * pntr ; // Nyilatkozzon egy pntr nevű mutatóváltozót típusú mutatóként
// vagy
típus * pntr ;
// vagy
típus * pntr ;
Például:
int * newPtr; // deklarálja az újPtr nevű mutatóváltozót, amely intre mutat (int mutatóra)
Ez a mutató megtartja a címet. Ez a cím int értékű.
dupla * newdPtr; // deklarálj egy dupla mutatót
A * jelzi, hogy egy mutatót deklarálnak és nem működik mint operátor.
ÁthelyezésA referenciaváltozót nem lehet újra kiosztani.
Példa:
int x = 5;
int y = 6;
int & r = x;
Egy mutatót hozzá lehet rendelni, és ez a tulajdonság akkor hasznos, ha a fejlesztő olyan adatszerkezeteket hajt végre, mint a csatolt listák, fák stb.
Példa:
int x = 5;
int y = 6;
int * p;
p = & x;
p = & y;
Memória címA referenciaváltozó ugyanazzal a címmel rendelkezik, mint az eredeti változó. Ezeket a hivatkozásokat át lehet adni különféle funkciókra, különféle osztályokban tárolhatók stb. A hivatkozás soha nem mutat egy új változóra, amíg a régi törlésre nem kerül, vagy érvénytelenné válik.A mutatónak saját memóriacíme van, és tárolja a veremben. A mutató egy független változó, és új értékeket rendelhet magához.
Nulla értékA referencia nem rendelhet null értéket.Egy mutatóhoz közvetlenül hozzárendelhető nulla érték.
érvekEgy referenciaváltozóra érték szerint lehet megkerülni. Itt az érveket érték szerint adja át a függvényeknek. Készítünk egy klónt, amelyet felhasználva elküldünk a funkcióhoz. A másolaton végrehajtott változtatásoknak nincs hatása az eredeti változóra.Ha meg akarjuk változtatni az eredeti példányt, akkor az megtehető úgy, hogy az objektum mutatóját átadja a függvénynek. Ezt úgy ismerték, mint referenciaként történő átadás.
Mikor kell használniA hivatkozások közvetett módon érik el a változót. Vegyük figyelembe a következő példát:
enum nap
(
Vasárnap hétfő, …
);
Ha definiálunk egy változót
x nap;
És azt szeretnénk, hogy egy operátort túlterheljünk az utasításra, akkor az alábbiak szerint írhatjuk:
nap és operátor ++ (nap és d)
(
d = (nap) (d + 1);
visszatérés d;
)
Röviden: ez használható funkcióparaméterekben és referenciatípusokban.
A mutatók használata előzetes deklarációt nem igényel.
nap * operátor ++ (* nap d);
Ez felhasználható adatstruktúrák és mutatószámtani műveletek végrehajtására.

Következtetés - C ++ referencia vs mutató

A C ++ referencia vs mutatóval nehéz dolgozni, ám ezek nagymértékben javítják a program hatékonyságát. Mindkét C ++ Reference vs Pointer saját felhasználással rendelkezik, és saját céljait szolgálja. Használhat mutatókat, amikor adatstruktúrákat és algoritmusokat kíván megvalósítani, míg hivatkozásokat, amikor függvényeket és paramétereket szeretne visszatérési típusokkal használni.

Ajánlott cikk

Ez egy útmutató a C ++ referencia és a mutató közötti legfontosabb különbségekhez. Itt is tárgyaljuk a C ++ referencia vs Pointer kulcs különbségeket az infographics és az összehasonlító táblázat segítségével. Lehet, hogy megnézi a következő cikkeket is, ha többet szeretne megtudni -

  1. Python vs C ++ különbségek
  2. C vs C ++ teljesítmény - legjobb különbségek
  3. MongoDB vs Cassandra
  4. Mobx vs Redux
  5. C ++ Vector vs Array: Legfontosabb különbségek
  6. MongoDB vs DynamoDB: Funkciók
  7. MongoDB vs SQL: Melyek a funkciók
  8. C vs C #: Funkciók

Kategória: