Soovitatav, 2024

Toimetaja Valik

Pointeri ja viite erinevus

Mõlema muutuja tähistamiseks või suunamiseks kasutatakse nii „pointer“ kui „viide”. Kuid nende kahe põhiline erinevus on see, et pointer muutuja osutab muutujale, mille mälu on selles salvestatud. Võrdlusmuutuja on sellele määratud muutuja varjunimi. Alljärgnevas võrdluskaardis vaadeldakse teisi erinevusi osuti ja viite vahel.

Võrdluskaart

Võrdluse alusPointerViide
PõhilineKursor on muutuja mäluaadress.Viide on muutuja varjunimi.
TagastabOsutaja muutuja tagastab väärtuse, mis asub aadressil, mis on salvestatud kursori muutujaga, millele eelneb kursoritähis „*”.Võrdlusmuutuja tagastab selle muutuja aadressi, millele eelneb viide „&”.
Operaatorid*, ->&
Null-viideOsutaja muutuja võib viidata NULL-le.Võrdlusmuutuja ei saa kunagi viidata NULL-le.
InitsialiseerimineVõimalik on luua algusteta pointer.Ühtlustamata viidet ei saa kunagi luua.
Initsialiseerimise aegKursori muutuja saab programmi mis tahes ajahetkel lähtestada.Võrdlusmuutuja saab lähtestada ainult selle loomise ajal.
TaastamineKursori muutuja saab taasalustada nii palju kordi kui vaja.Võrdlusmuutujat ei saa kunagi uuesti programmis taasalustada.

Pointeri määratlus

„Pointer” on muutuja, mis hoiab teise muutuja mälu. Osutaja muutuja poolt kasutatavad operaatorid on * ja ->. Osutaja muutuja deklaratsioon sisaldab baasandmete tüüpi, millele järgneb märk * ja muutuja nimi.

 tüüp * var_name; 

Mõelgem näitaja abil näite abil.

 int a = 4; int * ptr = & a; cout < 

Siin on meil täisarvu muutuja a ja pointer muutuja ptr, mis salvestab muutuja a a.

Pointer aritmeetika

Osutaja muutuja saab töötada kahe aritmeetilise operaatoriga, mis on “lisamine” ja “lahutamine”. Lisandiks nimetatakse “juurdekasvu” ja lahutamist nimetatakse “vähendamiseks”. Osutaja muutuja suurendamisel osutab see järgmise baasitüübi muutuja mälu asukohale. Osutaja muutujat vähendades viitab see eelmise muutuja baasmälu mälukohtale. Seega saab massiivi tõhusalt kasutada kursori muutujaga.

Mitmekordne suunamine

Osuti osutab teisele kursoritegurile, mis näitab sihtväärtust. Selline kursor lähtestatakse alati teise kursori muutuja aadressiga. Osutaja kursorile avaldamine on järgmine.

 tüüp ** var_name; 

Uurime seda näiteks.

 int a = 4; int * ptr1 = & a; int ** ptr2 = & ptr1; cout < 

Funktsioonitähis

Nagu me teame, et funktsioon ei ole muutuja, on sellel siiski mälu asukoht, mida saab määrata muutujaga. Kui kursor osutub funktsioonile, saab funktsiooni selle funktsiooni pointeriga kutsuda.

Tähtsad punktid, mida meelde tuletada.

  • Kursori muutuja saab luua ilma selle initsialiseerimiseta ja seda saab initsialiseerida kõikjal programmis.
  • Osutaja muutuja saab uuesti seadistada teiseks muutujaks.
  • Osutaja muutuja võib viidata NULL-le.

Viite määratlus

Võrdlusmuutujat kasutatakse selleks, et viidata muutujale, mis on määratud sellele muutujale. Võrdlusmuutuja kasutatav operaator on '&'. Võrdlusmuutuja deklaratsioon sisaldab baasi tüüpi, millele järgneb märk „&” ja seejärel muutuja nimi.

 tippige & refer_var_name = var_ nimi; 

Siin on tüüp andmeside, & operaator kinnitab, et tegemist on viitemuutujaga. Refer_var_name on viitemuutuja nimi. Var_name on muutuja nimi, mida me soovime viitemuutujale viidata.

Mõelgem võrdlusnäitaja abil näite abil.

 int a = 4; int & b = a; // b viitab ab = 6; // nüüd a = 6 

Siin omistatakse tüübi int muutuja väärtusele 4. Võrdlusmuutujale määratakse muutuja a, st b on a alias. Nüüd, kui me omistame teisele väärtusele b, muudame me a väärtust. Seega võib öelda, et võrdlusnäitaja muutused toimuvad ka muutujana, millele viitab see viitemuutuja.

Kõige olulisem punkt on see, et võrdlusmuutuja tuleb lähtestada selle loomise ajal. Kui võrdlusmuutuja on muutujaga initsialiseeritud, ei saa seda muuta, et viidata teisele muutujale. Kui määrate väärtuse viitemuutujale, määrate selle väärtuse muutujale, millele viitab muutuja. Võrdlusmuutuja ei saa kunagi viidata NULL-le. Aritmeetikat ei saa referentsmuutujaga teha.

Võrdlusmuutujat saab kasutada kolmel viisil:

  • Funktsioonina tagastamise väärtus.
  • Funktsiooniparameetrina.
  • Eraldi viitena.

Pointeri ja viite vahelised peamised erinevused

  1. Viide on nagu teise nime loomine, et viidata muutujale, et seda saaks nimetada erinevate nimedega. Teisest küljest on kursor lihtsalt muutuja mäluaadress.
  2. Osutaja muutuja, kui seda eelneb '*', tagastab muutuja väärtuse, mille aadress on salvestatud kursorivariandis. Viite muutuja, millele eelneb „&”, tagastab selle muutuja aadressi.
  3. Osutioperaatorid on * ja -> arvestades, et viiteoperaator on &.
  4. Osuti muutuja, kui tal ei ole muutuja aadressi, mis viitab nullile. Teisest küljest ei saa võrdlusnäitaja kunagi viidata Nullile.
  5. Saate alati luua ühildatud pointeri muutuja, kuid me loome viite, kui vajame mõne muutuja varjunime, nii et sa ei saa kunagi luua ühikuid.
  6. Saate uuesti indekseerida kursorit, kuid kui olete infereerinud, ei saa te seda uuesti uuesti käivitada.
  7. Saate luua tühja kursorit ja vormindada selle igal ajal, kuid peate lähtestama ainult siis, kui loote viite.

Märge:

Java ei toeta viiteid.

Järeldus

Osutaja ja viide mõlemad kasutatakse teise muutuja suunamiseks või suunamiseks. Kuid mõlemad erinevad nende kasutamise ja rakendamise poolest.

Top