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 alus | C ++ viide | Pointer |
Muutujad | Viidet 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. |
Deklaratsioon | C ++ 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ääramine | Viitemuutujat 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 aadress | Viitemuutujal 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äärtus | Viitele ei saa anda nullväärtust. | Kursoril võib olla otse määratud nullväärtus. |
Argumendid | Võ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 kasutada | Viited 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 -
- Python vs C ++ erinevused
- C vs C ++ jõudlus - parimad erinevused
- MongoDB vs Cassandra
- Mobx vs Redux
- C ++ vektor vs massiiv: peamised erinevused
- MongoDB vs DynamoDB: funktsioonid
- MongoDB vs SQL: millised on funktsioonid
- C vs C #: Funktsioonid