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ött | C ++ referencia | Mutató |
változók | A 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. |
Nyilatkozat | A 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és | A 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ím | A 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ék | A referencia nem rendelhet null értéket. | Egy mutatóhoz közvetlenül hozzárendelhető nulla érték. |
érvek | Egy 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álni | A 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 -
- Python vs C ++ különbségek
- C vs C ++ teljesítmény - legjobb különbségek
- MongoDB vs Cassandra
- Mobx vs Redux
- C ++ Vector vs Array: Legfontosabb különbségek
- MongoDB vs DynamoDB: Funkciók
- MongoDB vs SQL: Melyek a funkciók
- C vs C #: Funkciók