Erinevus C ++ referentsi ja osuti vahel

Ehkki C ++ viide osutile näib olevat sarnane, on C ++ viite ja osuti vahel siiski oluline erinevus. Võrdlusmuutuja võib öelda olemasoleva muutuja teise nime all. Kui see muutuja on initsialiseeritud, saab muutuja nime kasutada mõne muu muutuja viitamiseks. Osutused seevastu on muutujad, mis salvestavad muutuja aadressi. Nagu iga muutuja, deklareeritakse need kõigepealt ja seejärel saab iga muutuja aadressi talletada. Vaatame allpool üksikasjalikumalt erinevusi C ++ Reference vs Pointer vahel.

C ++ viite ja osuti võrdlus ühest otsast teise (infograafika)

Allpool on 7 peamist erinevust C ++ viite ja osuti vahel

Peamised erinevused C ++ viite ja osuti vahel

Mõlemad C ++ referents vs osuti on turul populaarsed valikud; arutame mõnda peamist erinevust C ++ võrdluspunkti ja osuti vahel:

Peamine erinevus C ++ viite ja osuti vahel on see, et üks viitab teisele muutujale, samas kui viimane hoiab käes muutuja aadressi. Viited ei muuda algset muutujat, samas kui osuti muudetakse, mõjutab see algset muutujat. Viide tuleb deklareerimisel initsialiseerida, samas kui osutit pole vaja taas deklareerida. Moodulite massiivi saab luua, samas kui viidete massiivi ei saa luua. Nullväärtust ei saa referentsile omistada, kuid osutile saab selle määrata.

C ++ viide vs osuti võrdlustabel

Allpool käsitletakse peamist võrdlust C ++ võrdluspunkti ja osuti vahel:

C ++ viite ja osuti võrdluse alusC ++ viidePointer
MuutujadViidet võib nimetada olemasoleva muutuja varjunimeks. Selle muutuja põhikasutus töötab parameetrina, mis töötab möödasõiduna. See antakse edasi funktsioonile. Funktsioon, millele see edastatakse, töötab originaalmuutujal, mitte väärtuselise koopiana. Funktsioonis tehtud muudatused kajastuvad ka väljaspool.Pointer muutujad on muutujad, mis salvestavad aadressi. Erinevalt tavalistest muutujatest, mis meil on, nagu int, double ja char, salvestab see mäluaadresse. Programmeerimise hõlbustamiseks on vaja seda muutujat. See on muutuja, mis võib salvestada teatud tüüpi väärtuse.
DeklaratsioonC ++ võrdlusmuutuja deklareerimiseks lisatakse muutuja ette sümbol &. Kui seda kasutatakse väljendina, tähendab see, et see töötab operaatori aadressina. Seda kasutatakse olemasolevale muutujale uue nime andmiseks.
Süntaks:
tüüp & newName = olemasolevNimi ;
// või
tüüp & newName = olemasolevNimi ;
// või
tüüp & newName = olemasolevNimi ;
Näiteks:
/ * Testi viitedeklaratsioon ja lähtestamine * /
# kaasata
nimeruumi std kasutamine;
int main () (
stringi nimi = “Priya”; // Kuulutage stringimuutuja nimega
string & refName = name; // Kuulutage viide (varjunimi) muutuja nimele
// Nii refName kui ka nimi viitavad “Priya” samale väärtusele
cout << nimi << endl; // See prindib muutuja “Priya” väärtuse
cout << refName << endl; // See prindib viite “Priya” väärtuse
Nüüd muutke nime Nimi väärtust
refName = “Karishma”; // Määrake refName'ile uus väärtus
cout << refName << endl;
cout << nimi << endl; // Arvu väärtus muudab ka “Karishma”
nimi = “Snehal”; // Määrake nimele uus väärtus
cout << namer << endl;
cout << refName << endl; // refName väärtus muudab ka “Snehal”
)
See tähendab, et võrdlusmuutuja väärtusi saab muutuja originaalis ja koopias muuta.
Enne kursori kasutamist programmis tuleks see eelnevalt deklareerida. Osuti kuulutamiseks ja süsteemile teada saamiseks, et see on osuti, on muutuja eesliide "*". Osutiga on kaasas andmetüüp, mis võib olla int või double jne.
Süntaks:
tüüp * pntr ; // Kuulutage kursori muutuja nimega pntr tüübi osutiks
// või
tüüp * pntr ;
// või
tüüp * pntr ;
Näiteks:
int * newPtr; // Kuulutage kursori muutuja nimega newPtr, mis osutab int (int osutile)
See osuti hoiab aadressi. Sellel aadressil on sisemine väärtus.
topelt * newdPtr; // Kuulutage topeltkursor
* Näitab, et osuti on deklareeritud ega tööta operaatorina.
Uuesti määramineViitemuutujat ei saa ümber määrata.
Näide:
int x = 5;
int y = 6;
int & r = x;
Osutit saab ümber määrata ja see omadus on kasulik, kui arendaja rakendab andmestruktuure, näiteks lingitud loendeid, puid jne.
Näide:
int x = 5;
int y = 6;
int * p;
p = & x;
p = & y;
Mälu aadressViitemuutujal on sama aadress, mis algsel muutujal. Neid viiteid saab edastada erinevatele funktsioonidele, neid saab salvestada erinevates klassides jne. Viide ei osuta kunagi uuele muutujale enne, kui vana on kustutatud või selle ulatusest välja jäetud.Kursoril on oma mäluaadress ja see salvestab selle virna. Kursor on iseseisev muutuja ja sellele saab enda jaoks uued väärtused määrata.
NullväärtusViitele ei saa anda nullväärtust.Kursoril võib olla otse määratud nullväärtus.
ArgumendidVõrdlusmuutujale saab väärtuse järgi mööda minna. Siin antakse argumendid funktsioonide väärtuse järgi edasi. Kloon tehakse ja saadetakse funktsiooni kasutades. Koopias tehtud muudatused ei mõjuta algset muutujat.Kui soovime originaalset koopiat muuta, saab seda teha, suunates objekti osuti funktsiooni. Seda nimetatakse möödasõiduks.
Millal kasutadaViited pääsevad muutujale kaudselt juurde. Vaatleme järgmist näidet:
enum päev
(
Pühapäev esmaspäev, …
);
Kui määratleme muutuja
päev x;
Ja me tahame, et operaator laaditaks avaldusele üle, siis võime kirjutada järgmiselt:
päev ja operaator ++ (päev ja päev)
(
d = (päev) (d + 1);
tagasi d;
)
Lühidalt, seda saab kasutada funktsiooni parameetrites ja viitetüüpides.
Näpunäidete kasutamine ei eelda eeldeklaratsiooni.
päev * operaator ++ (päev * d);
Seda saab kasutada andmestruktuuride ja osuti aritmeetiliste toimingute rakendamiseks.

Järeldus - C ++ võrdlus vs osuti

C ++ Reference vs Pointer abil on keeruline töötada, kuid need parandavad programmi tõhusust suures osas. Mõlemal C ++ Reference vs Pointer-l on oma kasutus ja nad täidavad oma eesmärke. Võite kasutada viiteid, kui soovite rakendada andmestruktuure ja algoritme, kui viiteid, kui soovite funktsioone ja parameetreid kasutada tagastamise tüüpidega.

Soovitatav artikkel

See on juhend peamiste erinevuste kohta C ++ viide vs Pointeri vahel. Siin käsitleme ka C ++ viide vs osuti põhierinevusi infograafikaga ja võrdlustabelit. Võite lisateabe saamiseks vaadata ka järgmisi artikleid -

  1. Python vs C ++ erinevused
  2. C vs C ++ jõudlus - parimad erinevused
  3. MongoDB vs Cassandra
  4. Mobx vs Redux
  5. C ++ vektor vs massiiv: peamised erinevused
  6. MongoDB vs DynamoDB: funktsioonid
  7. MongoDB vs SQL: millised on funktsioonid
  8. C vs C #: Funktsioonid

Kategooria: