Razlika med referenco C ++ in kazalcem

Čeprav se zdi C ++ sklicevanje na kazalec podobno, obstaja bistvena razlika med obema referencama C ++ in kazalcem. Referenčno spremenljivko lahko rečemo kot drugo ime za obstoječo spremenljivko. Ko je ta spremenljivka inicializirana, se lahko ime spremenljivke uporabi za sklicevanje na drugo spremenljivko. Po drugi strani so kazalci spremenljivke, ki hranijo naslov spremenljivke. Kot katera koli spremenljivka je tudi ta razglašena najprej, nato pa lahko vanje shranite naslov katere koli spremenljivke. Naj si podrobneje ogledamo razlike med referencami C ++ in Pointer kot spodaj.

Primerjava med glavo in kazalcem C ++ v primerjavi s kazalcem (Infographics)

Spodaj je zgornja 7 razlika med C ++ Reference in Pointer

Ključne razlike med referenco C ++ in kazalcem

Oba C ++ Reference in Pointer sta priljubljeni izbiri na trgu; pogovorimo se o nekaterih glavnih razlikah med referencami C ++ in kazalcem:

Glavna razlika med referenco C ++ in kazalcem je v tem, da se ena nanaša na drugo spremenljivko, medtem ko ta shranjuje naslov spremenljivke. Reference ne spremenijo izvirne spremenljivke, medtem ko, če je kazalec spremenjen, to vpliva na izvirno spremenljivko. Reklamacija mora biti inicializirana na deklaraciji, medtem ko po deklaraciji ni treba inicializirati kazalca. Ustvari se lahko matrika kazalcev, medtem ko ni mogoče ustvariti matrike referenc. Ničelne vrednosti ni mogoče dodeliti referenci, vendar jo je mogoče dodeliti kazalcu.

C ++ sklic in primerjalna tabela kazalcev

Primarna primerjava med referencami C ++ in kazalcem je opisana spodaj:

Osnova primerjave med C ++ Reference in PointerC ++ ReferenceKazalec
SpremenljivkeSklicevanje lahko rečemo kot vzdevek obstoječe spremenljivke. Glavna uporaba te spremenljivke je dejanje kot parameter, ki deluje kot mimohodna referenca. Ta se prenese na funkcijo. Funkcija, ki se ji posreduje, deluje na izvirni spremenljivki namesto na kopiji v vrednosti mimo. Spremembe v funkciji se bodo odrazile tudi zunaj.Spremenljivke kazalca so spremenljivke, ki shranjujejo naslov. Za razliko od običajnih spremenljivk, ki jih imamo kot int, double in char, hrani pomnilniške naslove. Zaradi lažjega programiranja se pojavi potreba po tej spremenljivki. To je spremenljivka, ki lahko shrani vrednost določene vrste.
IzjavaIzjava referenčne spremenljivke C ++ se izvede tako, da se pred spremenljivko doda simbol '&'. Ko se uporablja z izrazom, pomeni, da deluje kot naslov operaterja. Uporablja se za podajanje drugega imena obstoječi spremenljivki.
Sintaksa:
vnesite & newName = obstoječeName ;
// oz
vnesite & newName = obstoječeName ;
// oz
vnesite & newName = obstoječeName ;
Na primer:
/ * Referenčna preskusna deklaracija in inicializacija * /
#include
uporaba imenskega prostora std;
int main () (
ime niza = "Priya"; // Razglasite spremenljivko niza z imenom name
string & refName = ime; // Izjavite sklic (alias) na ime spremenljivke
// Tako refName kot ime se nanašata na isto vrednost »Priya«
cout << ime << endl; // Natisne vrednost spremenljivke „Priya“
cout << refName << endl; // Natisne vrednost referenčne vrednosti „Priya“
Zdaj spremenite vrednost Name
refName = »Karishma«; // Znova dodelite novo vrednost refName
cout << refName << endl;
cout << ime << endl; // Vrednost števila se spremeni tudi »Karishma«
name = „Snehal“; // Znova dodelite novo vrednost imenu
cout << namer << endl;
cout << refName << endl; // Vrednost refName spremeni tudi "Snehal"
)
To pomeni, da se lahko vrednosti referenčne spremenljivke spremenijo v izvirniku in kopiji spremenljivke.
Preden uporabite kazalec kjer koli v programu, ga je treba vnaprej prijaviti. Če želite razglasiti kazalec in obvestiti sistem, da gre za kazalec, je spremenljivka predpona z * *. Kazalcu je priložen tip podatkov, ki je lahko int ali dvojnik itd.
Sintaksa:
tip * pntr ; // Razglasite spremenljivko kazalca, imenovano pntr, kot tip kazalca
// oz
tip * pntr ;
// oz
tip * pntr ;
Na primer:
int * newPtr; // Razglasite spremenljivko kazalca, imenovano newPtr, ki kaže na int (int kazalec)
Ta kazalec bo imel naslov. Ta naslov ima int vrednost.
dvojni * newdPtr; // Razglasite dvojni kazalec
* Pomeni, da se kazalec deklarira in ne deluje kot operater.
PrerazporeditevReferenčne spremenljivke ni mogoče ponovno dodeliti.
Primer:
int x = 5;
int y = 6;
int & r = x;
Kazalec je mogoče prerazporediti in ta lastnost je uporabna, ko razvijalec izvaja strukture podatkov, kot so povezani seznami, drevesa itd.
Primer:
int x = 5;
int y = 6;
int * p;
p = & x;
p = & y;
Spominski naslovReferenčna spremenljivka ima isti naslov kot izvorna spremenljivka. Te reference se lahko pošljejo različnim funkcijam, shranijo jih lahko v različnih razredih itd. Referenca nikoli ne kaže na novo spremenljivko, dokler se stara ne izbriše ali ne izstopi iz obsega.Kazalec ima svoj pomnilniški naslov in ga shrani na kup. Kazalnik je neodvisna spremenljivka in ima lahko nove vrednosti, dodeljene sebi.
Ničelna vrednostReferenci ne more biti dodeljena ničelna vrednost.Kazalec ima lahko neposredno dodeljeno ničelno vrednost.
ArgumentiNa referenčno spremenljivko se lahko sklicuje bypass po vrednosti. Tu se argumenti po vrednosti posredujejo funkcijam. Naredi se klon in ga s funkcijo pošlje funkciji. Spremembe v kopiji ne vplivajo na izvirno spremenljivko.Ko želimo izvirno kopijo spremeniti, lahko to storimo tako, da kazalec predmeta prestavimo v funkcijo. To je znano kot referenca.
Kdaj uporabitiReference posredno dostopajo do spremenljivke. Razmislite o naslednjem primeru:
enum dan
(
Nedelja, ponedeljek, …
);
Če določimo spremenljivko
dan x;
In želimo, da operater preobremeni izjavo, potem lahko zapišemo kot spodaj:
dan in operater ++ (dan in d)
(
d = (dan) (d + 1);
vrniti d;
)
Skratka, to je mogoče uporabiti v funkcijskih parametrih in referenčnih vrstah.
Uporaba kazalcev je brez predhodne deklaracije.
dan * operater ++ (dan * d);
To je mogoče uporabiti za izvajanje struktur podatkov in aritmetičnih operacij kazalcev.

Zaključek - referenca C ++ proti kazalcu

C ++ Reference in Pointer je težko obdelovati, vendar v veliki meri izboljšujejo učinkovitost programa. Oba C ++ Reference vs Pointer imata svoje namene in služijo svojim lastnim namenom. Kazalnike lahko uporabite, kadar želite implementirati podatkovne strukture in algoritme, medtem ko sklicevanje, kadar želite uporabiti funkcije in parametre s povratnimi vrstami.

Priporočeni članek

To je vodilo za največje razlike med referencami C ++ in Pointer. Tukaj razpravljamo tudi o ključnih razlikah med referencami C ++ in kazalcem z infografiko in primerjalno tabelo. Za več informacij si lahko ogledate tudi naslednje članke -

  1. Razlike v Pythonu v primerjavi s C ++
  2. Uspešnost C v primerjavi s C ++ - najboljše razlike
  3. MongoDB proti Cassandri
  4. Mobx proti Reduxu
  5. C ++ Vector vs Niz: Najboljše razlike
  6. MongoDB proti DynamoDB: Funkcije
  7. MongoDB vs SQL: Katere so funkcije
  8. C proti C #: Funkcije