Atšķirība starp rādītāju un atsauci

Gan rādītāji, gan atsauces ir visspēcīgākās funkcijas C un C ++, kas programmētājiem ļauj tieši manipulēt ar atmiņas adresi, lai efektīvi pārvaldītu atmiņu..

Abi ir mainīgie, kurus izmanto, lai netieši atsauktos uz citiem objektiem, un tiem ir dažas kopīgas iezīmes virsmā. Lai arī viņiem ir daudz kopīgu iespēju, tos ir arī ļoti sarežģīti saprast.

Rādītājs ir mainīgais, kas satur cita mainīgā atmiņas adresi, turpretī atsauce ir kā rādītājs, kuru var izmantot, lai netieši norādītu uz citu mainīgo..

Šķiet, ka vairumam programmētāju ir zināma izpratne par to, kad lietot norādes un kad izmantot atsauces, taču viņi bieži saskaras ar problēmām, kuru risinājums šķiet neskaidrs..

Tātad, lai labāk izprastu filozofiju, sapratīsim atšķirību starp abiem.

Kas ir rādītājs?

Katrs mainīgais ir atmiņas vieta, ko nosaka tā adrese un kas ir savienota pārī ar identifikatoru, kurā ir kāda vērtība, kuru var mainīt programmas laikā. Vienkārši izsakoties, mainīgais ir simbols, kas apzīmē daudzumu.

Rādītājs ir mainīgais, kas satur cita mainīgā atmiņas adresi. Rādītājs nav nekas cits kā adrese, un mainīgo lielumu, kas glabā rādītāju, sauc par rādītāja mainīgo.

Ideja ir skaitlisko adrešu vietā izmantot identifikatorus (vai nosaukumus), lai atvieglotu programmēšanas slogu, tādējādi samazinot programmu sarežģītību. Tā kā šīs adreses norāda uz faktiskajām atrašanās vietām datora atmiņā, norādes var izmantot, lai piekļūtu atmiņā saglabātajam saturam un ar to manipulētu.

Tāpat kā jebkuram mainīgam vai konstantam, rādītāji jādeklarē to tipiem. Tā kā norādes satur atmiņas adreses, kas pieder atsevišķam datu tipam, pirms jūs varat strādāt ar tām, tās ir jādeklarē, izmantojot norādes. Rādītāja deklarācijas vispārīgā forma ir:

Data_type * var-name;

Šeit “Data_type” ir rādītāja bāzes tips un “var-name” ir rādītāja mainīgais. Zvaigznīte (*) šeit tiek izmantota, lai deklarētu rādītāju, kas apzīmē mainīgo “var-name” kā rādītāja mainīgo.

int * p; // vesels skaitlis

pludiņš * x; // pludiņa rādītājs

Šeit mainīgais “p” norāda uz vesela skaitļa datu tipu, kas tiek deklarēts kā “int”, kas attiecas uz mainīgā datu tipu. Tāpat otrajā piemērā “pludiņš” attiecas uz mainīgā “x” datu tipu, kas faktiski tiek apzīmēts kā rādītājs uz peldoša komata mainīgo.

Kas ir atsauce?

Atsauce ir kā rādītājs ar netiešu piekļuvi mainīgajam. Tas ir kā cita mainīgā aizstājvārds, kas nozīmē, ka tas ir tikai cits jau esoša mainīgā nosaukums.

Tas ļauj programmētājiem izveidot mainīgā nosaukuma otro nosaukumu, kuru viņi var izmantot, lai manipulētu ar mainīgajā saglabāto saturu. Tā ir entītija, kas ir cita mainīgā aizstājvārds, un tai ir tāda pati adrese kā sākotnējam mainīgajam. Tas atbalsta garāmbraukšanas atsauci, kas darbojas kā funkcijas formālie parametri, un pēc tam, kad tā ir definēta kā atsauce uz mainīgo, to nevar atkārtoti iestatīt, kas nozīmē, ka to nevar atsaukties uz citu mainīgo.

Atšķirībā no norādēm, lai piekļūtu vērtībai, nav nepieciešams operatora atsaukšana; patiesībā tos var izmantot kā parastos mainīgos.

int i;

int & ri = i;

Šeit “ri” ir vesels skaitlis, kas inicializēts ar “i”. Tas deklarē “ri” kā “atsauces uz int” objektu. Atsauci var viegli sajaukt ar rādītāju, kas ir neatkarīgs mainīgais, kura adreses vērtības pēc izveidošanas nevar no jauna piešķirt,.

Atšķirība starp rādītāju un atsauci

  1. Rādītāja un atsauces pamati

- Abas nodrošina gandrīz līdzīgas iespējas lietojamības ziņā, un atšķirība var būt sarežģīta. Rādītājs ir tikai mainīgais, kas saglabā cita mainīgā atmiņas adresi, turpretī atsauce ir kā jau esoša mainīgā aizstājvārds. Tas rada mainīgajam otro nosaukumu, kuru var izmantot, lai modificētu šajā mainīgajā saglabāto saturu.

  1. Rādītāja un atsauces deklarācija

- Rādītājs ir tāds pats kā jebkurš cits mainīgais, kas saglabā datu gabalu. Atšķirībā no citiem mainīgajiem rādītāju rādītāji vērtību atmiņā saglabā atmiņas adreses. Rādītājam tiek atsaukta atsauce, izmantojot ieslēgšanas operatoru *, lai piekļūtu tā mainīgā lieluma atmiņas vietai, uz kuru tas norāda. No otras puses, atsaucei nav nepieciešams neviens atsaukšanas operators, lai piekļūtu vērtībai.

  1. Rādītāja un atsauces maiņa

- Atšķirībā no rādītājiem, kurus var inicializēt jebkurā laikā, inicializācijā ir jāpiešķir atsauces. Norādījumiem var piekļūt tieši, turpretī norādēm nevar piekļūt tieši.

  1. Rādītāja un atsauces atmiņas adrese

- Rādītāja mainīgajam ir sava vieta atmiņā, kas nozīmē, ka, deklarējot rādītāju, jūs norādāt atrašanās vietu, kas ir atmiņas adrese, kas piešķirta katrai atmiņas vienībai. Rādītāja mainīgajam ir tā pati adrese, kur tas tiek saglabāts atmiņā. Atsauces mainīgais, no otras puses, ir cita mainīgā aizstājvārds, tādējādi ņemot atsauces mainīgā adresi.

  1. NULL rādītāja un atsauces vērtība

- NULL apzīmē saraksta beigas, kas nozīmē, ka vērtība norāda, ka vērtība nav zināma, un tas norāda, ka mainīgajam nav derīgas adreses. NULL vērtību rādītāja mainīgajam var piešķirt tieši, kas liek domāt, ka tā nekur nenorāda, turpretī NULL nevar piešķirt atsauces mainīgajam..

Rādītājs pret atsauci: salīdzināšanas tabula

Kopsavilkums par rādītāju un atsauci

Norādījumi vienmēr ir bijuši vieni no iecienītākajiem C / C ++ programmētāju diskusiju tematiem, līdz atsauces tika iegūtas. Atsauces ir nedaudz līdzīgas norādēm, taču tām ir diezgan liela plusi un mīnusi. Lai arī abus var izmantot, lai mainītu vienas funkcijas lokālos mainīgos citā funkcijā, tām ir atšķirības. Abas ir jaudīgas funkcijas C un C ++, kas ļauj tieši manipulēt ar atmiņu, taču ar dažiem izņēmumiem. Rādītājam ir mainīgā atmiņas adrese, turpretī atsauce ir tikai cita mainīgā aizstājvārds.