Osuti vs viide: erinevus ja võrdlus

C ja C++ on kõige sagedamini kasutatavad programmeerimiskeeled, kuna need on põhilised algaja uksed programmeerimismaailma. Osutajad ja viited on mõned kõige kasulikumad võimalused, mida need keeled pakuvad. Osureid kasutatakse C ja C++ keeles ning viiteid toetatakse C++, Python ja teistes keeltes.

Võtme tagasivõtmine

  1. Osutajad salvestavad muutujate või objektide mäluaadresse, samas kui viited toimivad olemasolevate muutujate varjunimedena.
  2. Osujaid saab ümber määrata erinevatele mäluaadressidele, samas kui viiteid ei saa pärast lähtestamist muuta.
  3. Osutitel on vaja selget viitamise tühistamist, et pääseda juurde väärtusele, millele nad osutavad, samas kui viiteid saab kasutada otse, nagu algset muutujat.

Osuti vs viide

Osuti on muutuja, mis saab erineva muutuja mäluaadressi ja seda saab programmis mitu korda lähtestada, sõltuvalt sellest, mitu korda seda vaja on. Viide on alternatiivne programmimuutuja ja seda saab kogu programmis initsialiseerida ainult üks kord.

Osuti vs viide

Osuti on muutuja, mille väärtuseks on teise muutuja aadress või asukoht. Neid saab lähtestada suvalises kohas programmis selliste operaatoritega nagu '*' ja '->'. Osutimuutuja saab muuta ka nulliks ja need toetavad ka taasinitsialiseerimist. Põhiandmetüüp deklareerib osutid, millele järgneb tärn ja kursori nimi. 

Viide on juba peene programmimuutuja teise nimega muutuja. Niipea kui võrdlusmuutuja on loodud, tuleks see lähtestada. See loob teise muutuja varjunime. Operaatorit & kasutatakse selleks disain viited. Need tehakse baasandmete tüübi järgi, millele järgneb '&' ja muutuja nimi.

Võrdlustabel

VõrdlusparameetridPointerViide
MääratlusMuutujat, mis hoiab teise muutuja mäluaadressi, nimetatakse osutimuutujaks.Viide on alias teisele muutujale, viide sellele.
NullviideKursorile saab määrata nullväärtuse.Võrdlusmuutujale ei ole nullväärtust omistatud. 
SüntaksAndmetüüp *PointerName; Kus Datatype on baasandmetüüp ja PointerName on deklareeritud kursori nimi.Andmetüüp &ReferenceName = Teinemuutuja; Kus ReferenceName on viite nimi ja OtherVariable on muutuja, millele viidatakse.
VormindamineVõimalik on luua initsialiseerimata viiteid.Viiteid ei saa kunagi luua initsialiseerimata
TaasinitsialiseerimineOsutimuutujaid saab programmis vastavalt vajadusele ikka ja jälle lähtestada.Võrdlusmuutujat saab programmis lähtestada ainult üks kord.

Mis on Pointer?

Lühidalt öeldes on osuti muutuja, mis hoiab programmi mis tahes muu muutuja mälukohta või aadressi. Osutajad töötavad C ja C++ keeles. Osutusmuutuja salvestab osutusmuutuja aadressi asukoha. Osutaja muutujaid saab deklareerida ja seejärel initsialiseerida muutujaga, mille aadress määratakse.

Samuti loe:  Java vs JRE: erinevus ja võrdlus

Lisaks on neil selgus, kuna täisarvu osuti võib hoida ainult täisarvulise muutuja aadressi. Osutitel on selge deklareerimisviis. Näiteks int *point on osuti int tüüpi muutujale ja double *ABC on osuti andmetüüpi double muutujale. Sama kontseptsioon kehtib ka muude andmetüüpide kohta. Seega deklareeritakse osuti järgmisel viisil:

int *osuti muutuja;

Pärast kursori deklareerimist määratakse kursori muutuja muutujale, mille aadress määratakse. Ülaltoodud deklaratsioonilause kasutab kursorit, mis salvestab täisarvulise muutuja väärtuse. 

osutimuutuja = &a;

Siin on a täisarvuline muutuja, mida kasutatakse programmi teises pooles ja mille aadress on salvestatud muutuja osutisse. Osutajad annavad ka vastutus uuesti initsialiseerimiseks. Nende väärtusi saab vastavalt vajadusele muuta. 

Mis on viide?

Viitemuutuja on teise muutuja varjunimi. Teisisõnu, muutujat, mis viitab programmi teisele püsivale muutujale, peetakse võrdlusmuutujaks.

Neil on piirang, kuna neid ei saa määrata nullväärtusele ja neid ei saa deklareerida, need on ainult lähtestatud. Pärast viite loomist pääseb muutujale juurde viitenime või selle algse nime järgi. Viited initsialiseeritakse otse. näide, 

int &ref = var;

Siin on ref viitemuutuja nimi ja see osutab muutujale var, mis initsialiseeritakse programmi teises osas. Kui prinditakse ref ja var väärtused, on ref ja var samad väärtused. Osutajad on kasulikud mälu säästmisel, kuna kui need edastatakse funktsioonile argumentidena, kasutavad nad iga funktsioonikõne jaoks algset mälukohta.

Samuti loe:  Veebiseminar vs töötuba: erinevus ja võrdlus

Viitemuutujad ei võimalda uuesti initsialiseerimist ning need on ainult üks kord lähtestatud ja kordumatud. Viited ei osuta muutujale, salvestades selle aadressi eraldi mälukohta. Lihtsamalt öeldes on viitemuutuja olemasoleva muutuja alternatiivne nimi. Need on lihtsalt varjunimed muutuja teises nimes, millele viidatakse.

Peamised erinevused osuti ja viite vahel

  1. Osutimuutujale viidatakse möödaviigu viide järgi, samas kui viitemuutujale viidatakse väärtuse järgi möödaviigu.
  2. Osutajad toetavad teistele osutitele osutamise võimalust, samas kui viidetel see eelis puudub. Viitemuutujat ei saa panna osutama mitmele muutujale.
  3. Osutajad toetavad kasutamist aritmeetika operaatorid ja toimivad operandidena, samas kui võrdlusmuutujad ei saa ühilduda aritmeetiliste tehetega.
  4. Osutimuutuja suurus ja mäluaadress on virnas, samas kui võrdlusmuutujal on algsete muutujate mäluaadress, kuid see võtab ka pinus natuke ruumi. 
  5. Osutitel on deklareerimise eelised, samas kui viited ainult lähtestatakse.
viited
  1. https://link.springer.com/article/10.1023/A:1015362608943
  2. https://dl.acm.org/doi/pdf/10.1145/99583.99599

Viimati värskendatud: 11. juunil 2023

punkt 1
Üks palve?

Olen selle blogipostituse kirjutamisega nii palju vaeva näinud, et teile väärtust pakkuda. See on mulle väga kasulik, kui kaalute selle jagamist sotsiaalmeedias või oma sõprade/perega. JAGAMINE ON ♥️

12 mõtet teemal "Osutaja vs viide: erinevus ja võrdlus"

  1. C ja C++ on kõige sagedamini kasutatavad programmeerimiskeeled, kuna need on põhilised algaja uksed programmeerimismaailma. Osutajad ja viited on mõned kõige kasulikumad võimalused, mida need keeled pakuvad. Osureid kasutatakse C ja C++ keeles ning viiteid toetatakse C++, Python ja teistes keeltes.

    vastus

Jäta kommentaar

Kas soovite selle artikli hilisemaks salvestada? Oma artiklite kasti salvestamiseks klõpsake paremas alanurgas oleval südamel!