Erinevus osuti ja võrdluse vahel

Peamine erinevus - osuti vs viide
 

Enne osuti ja viite erinevuse arutamist uurime kõigepealt lühidalt nende kahe mõiste tähendust. Programmis hõivavad andmed mälu. Andmetele juurdepääsu saamiseks peaks olema teada mälu täpne asukoht, kuhu andmed pandi täitmise ajal. Pointer muutujad ja võrdlusmuutujad kasutatakse neile andmetele juurde pääsemiseks ja nende mäluaadressidega manipuleerimiseks. See tähendab, et objektide kaudseks viitamiseks saab kasutada nii viiteid kui ka viiteid. Sisuliselt peavad nad väärtustena mäluaadresse. võtme erinevus osuti ja viite vahel on see osuti on muutuja, mis salvestab mõne muu muutuja mälu asukoha aadressi samas a viide on muutuja, mis viitab teisele muutujale. Need kaks mehhanismi, osuti ja viide, neil on erinev süntaks ja kasutusviis.

Mis on osuti?

Osuti on programmeerimiskeele objekt, mis salvestab väärtuse mälu aadressi arvutimälus.

C ++ süntaksis;

int i = 5;

int * ptr = & i;

Esimene rida määratleb muutuja, mille algväärtus on 5. Teine rida määratleb muutuja mäluaadressi osuti. Siin deklareeritakse 'ptr' tüüpi objektina 'pointer to int', mille algväärtus on objekti i aadress. Sisuliselt ptr muutuja osutab i-le, talletades selle mälu aadressi.

Mälukohta salvestatud väärtuse saamist kutsutakse loobumine. Operaatorit * kasutatakse kursori kõrvalekaldumiseks. Pärast deklaratsioonide tegemist kaudse avaldise * ptr dereferences ptr viitamiseks i-le.

I väärtuse muutmiseks võib kasutada järgmist määramist;

* ptr = 20;

Viiteid võib ümber paigutada ka erinevatele objektidele viitamiseks.

A nullkursor on osuti eritüüp. Nullkursorit tähistatakse sageli nulliga või nulliga ja see osutab millelegi. Hea tava on kasutada nullkursorit juhul, kui pole täpset aadressi, millele osutada. Seda ülesannet saab kasutada loogilistes toimingutes ja tingimustes.

Näpunäited võivad olla dünaamiliselt eraldatud mälu aadresside salvestamiseks ja haldamiseks. Andmestruktuuride, näiteks virnade, järjekordade ja loendite rakendamine ja kontrollimine saab osutite kasutamise abil olla tõhusam. Näiteks võib järjekorral olla kaks osutust; pea osuti ja saba osuti. Viiteid saab kasutada ka muutujate edastamiseks nende aadressi järgi, mis võimaldaks väärtust muuta. Mälu või mäluga kaardistatud seadmete otsest manipuleerimist saab kasutada ka osutite abil.

Osutid võimaldavad nii kaitstud kui ka kaitsmata juurdepääsu adresseeritud mälule. Seetõttu tuleb osuti sisu õigsuse kontrollimiseks võtta vajalikke ettevaatusabinõusid. Vastasel juhul võib kehtetu mäluaadressiga kursori märkimata jätmine põhjustada programmi krahhi.

Viiteid toetatakse sellistes keeltes nagu C, C ++, Pascal ja paljudes koostamiskeeltes.

Pointer a osutades muutujaga seotud mäluaadressile b.

Mis on viide?

Viide on lihtsalt alternatiivne identifikaator mällu salvestatud väärtuse jaoks. See võimaldab programmil kaudselt juurde pääseda kindlale tugipunktile.

C ++ süntaksis;

int i = 5;

int & ref = i;

Esimene rida määratleb muutuja, mille algväärtus on 5. Teine rida kuulutab „ref” tüüpi objektina „viide int”, mis viitab i-le. Viide erineb andmetest endast, kuna viide rakendatakse mällu salvestatud konkreetse tugipunkti füüsilise aadressina.

Pärast määratlust ei saa viite jaoks uut väärtust määrata. Viide viitab alati objektile, millega see lähtestatakse. Järgmises ülesandes viitab ref ikka i-le, kuid väärtus on nüüd 20.

ref = 20;

Ülaltoodud näite kohaselt ei nõua viidete kaotamine ühtegi operaatorit.

Viiteid saab kasutada siis, kui muutuja viitab alati objektile. Selle põhjuseks on asjaolu, et erinevalt osutitest ei saa viited olla nullid ja need tuleb alati initsialiseerimisel määrata. Kuna viited peavad alati viitama mingile objektile, tagab sellise muutuja viiteks muutmine programmi tõhususe ja korrektsuse. Arvestades, et nullviiteid pole, ei pea võrdlusmuutuja kehtivust kontrollima.

Võrdlusmuutujad võivad olla kasutatakse suurte andmete tõhusaks edastamiseks argumentidena protseduuridele. Viiteid kasutatakse ka suurte andmete jagamisel erinevate koodialade vahel, kuna iga kood hoiab viidet andmetele.

Programmeerimiskeeled nagu C ++, Java, Python, Perl, PHP, Ruby jne toetavad viiteid.

Mis vahe on osuti ja viite vahel??

Osuti ja viite määratlus

Pointer: Kursor on arvutimällu salvestatud objekti mäluaadress.

Viide: Viide on objekti alternatiivne identifikaator või varjunimi.

Osuti ja viite omadused

Deklaratsioon

Pointer: Kursor kuulutatakse * operaatori abil.

Viide: Viide deklareeritakse & operaatoriga.

Tühistamine

Pointer: Osuti muutuja jaoks on vaja * operaatori viiteid katkestada.

Viide: Etalonmuutujal pole vaja ühegi operaatori märkimist.

Initsialiseerimine

Pointer:  Viiteid saab lähtestada nulliks. Selliseid muutujaid nimetatakse nullpunktideks.

Viide: Viiteid ei saa nullida. Nullviidet pole olemas. Viide peab alati viitama objektile.

Ümberpaigutused

Pointer: Osuti muutuja võib olla määratud erinevatele objektidele viitamiseks.

Viide: Viitemuutujat ei saa ümber määrata. See viitab alati objektile, millega see initsialiseeriti.

Kasutamine

Pointer: Pointer-muutujaid tuleks kasutada siis, kui millelegi viitamise võimalus on olemas või kui eri aegadel on vaja viidata erinevatele asjadele.

Viide: Etalonmuutujaid tuleks kasutada siis, kui alati on objekti, millele viidata, ja kui seda viitemuutujat ei pea kasutama millelegi muule kui sellele objektile viitamiseks.

Kasutuse rakendamine

Pointer: Pointer muutujaid saab kasutada algoritmide ja andmestruktuuride rakendamiseks.

Viide: Viitemuutujaid saab kasutada funktsiooniparameetrites ja tagasituletüübid määravad kasulikke liideseid.

Kasutatud keeled:

Pointer: Programmeerimiskeeled nagu C, C ++, Pascal ja paljud monteerimiskeeled toetavad viiteid.

Viide: Programmeerimiskeeled nagu C ++, Java, Python, Perl, PHP, Ruby jne toetavad viiteid.

Kujutise viisakus: "Näpunäited" - selle faili tegi kasutaja: SvenTranslation.Oma töö.See vektorpilt loodi Inkscape'iga. (CC BY-SA 3.0) Commonsi kaudu -