Porovnávacia tabuľka
Základ pre porovnanie | ukazovateľ | referencie |
---|---|---|
základné | Ukazovateľ je pamäťová adresa premennej. | Odkaz je alias pre premennú. |
výnos | Ukazovateľ ukazovateľa vracia hodnotu umiestnenú na adrese uloženej v ukazovateli ukazovateľa, ktorá je označená znakom ukazovateľa "*". | Referenčná premenná vracia adresu premennej, ktorému predchádza referenčná značka '&'. |
operátori | *, -> | & |
Nulová referencia | Proměnná ukazovateľa sa môže vzťahovať na hodnotu NULL. | Referenčná premenná sa nikdy nemôže vzťahovať na hodnotu NULL. |
inicializácia | Môžete vytvoriť neinicializovaný ukazovateľ. | Neinicializovaná referencia sa nikdy nedá vytvoriť. |
Čas inicializácie | Ukazovateľ ukazovateľa môže byť inicializovaný v ľubovoľnom okamihu v programe. | Referenčná premenná môže byť inicializovaná len v čase jej vytvorenia. |
reinitialization | Ukazovateľ premennej sa môže znovu inicializovať toľkokrát, koľkokrát je potrebné. | Referenčná premenná sa v programe nikdy nemôže znovu inicializovať. |
Definícia ukazovateľa
"Ukazovateľ" je premenná, ktorá uchováva pamäťovú polohu inej premennej. Operátory používané ukazovateľom premennej sú * a ->. Deklarácia premennej ukazovateľa obsahuje základný typ údajov nasledovaný znakom '*' a názvom premennej.
typ * var_name;
Poďme pochopiť ukazovateľ s pomocou príkladu.
int a = 4; int * ptr = & a; cout <Tu máme celočíselnú premennú a a ukazovateľ premennej ptr, ktorý ukladá adresu premennej a.
Pointer Aritmetic
Ukazovateľ ukazovateľa môže byť prevádzkovaný s dvoma aritmetickými operátormi, ktoré sú "prírastkom" a "odčítaním". Prídavok sa označuje ako "prírastok" a odčítanie sa označuje ako "zníženie". Ako ukazovateľ premennej sa zvyšuje, poukazuje na pamäťovú polohu nasledujúcej premennej základného typu. Keď je ukazovateľ premennej zmenšený, ukazuje na pamäťovú polohu predchádzajúcej premennej základného typu. Preto môže byť pole efektívne pristupované ukazovateľom ukazovateľa.
Viacnásobné smerovanie
Ukazovateľ ukazuje na inú ukazovateľ ukazovateľa, ktorý smeruje na cieľovú hodnotu. Tento typ ukazovateľa sa vždy inicializuje pomocou adresy inej ukazovateľa ukazovateľa. Vyhlásenie ukazovateľa na ukazovateľ je nasledovné.
typ ** var_name;Pozrime sa na to s príkladom.
int a = 4; int * ptr1 = & a; int ** ptr2 = & ptr1; cout <Funkčný ukazovateľ
Keďže vieme, že funkcia nie je premennou, stále má pamäťovú pozíciu, ktorá môže byť priradená ukazovateľu ukazovateľa. Keď ukazovateľ ukazuje na funkciu, funkcia môže byť vyvolaná pomocou tohto ukazovateľa funkcie.
Dôležité body, ktoré si pamätajte na ukazovateľ.
- Promócia ukazovateľa sa dá vytvoriť bez jej inicializácie a dá sa inicializovať kdekoľvek v programe.
- Ukazovateľ premennej môže byť znovu inicializovaný na inú premennú.
- Proměnná ukazovateľa sa môže vzťahovať na hodnotu NULL.
Definícia referencie
Referenčná premenná sa používa na označenie premennej, ktorá je priradená k tejto referenčnej premennej. Operátor, ktorý používa referenčná premenná, je '&'. Vyhlásenie referenčnej premennej obsahuje základný typ, za ktorým nasleduje znak "&" a názov premennej.
typ & refer_var_name = var_ name;Tu je typ dátového typu, & operátor potvrdzuje, že ide o referenčnú premennú. Názov refer_var_name je názov referenčnej premennej. Var_name je názov premennej, o ktorú chceme odkazovať referenčnú premennú.
Chápeme referenčnú premennú pomocou príkladu.
int a = 4; int & b = a; b označuje ab = 6; // teraz a = 6Tu je premennej typu int priradená hodnota 4. Referenčnej premennej je priradená premenná a, tj b je alias a. Teraz, keď priradíme ďalšiu hodnotu b, upravíme hodnotu a. Preto možno povedať, že zmeny uskutočnené na referenčnú premennú sa vyskytnú aj v premennej odkazovanej touto referenčnou premennou.
Najdôležitejším bodom je to, že referenčná premenná musí byť inicializovaná v čase jej vytvorenia. Keď je referenčná premenná inicializovaná s premennou, nemôže byť znovu inicializovaná s odkazom na inú premennú. Po priradení hodnoty referenčnej premennej priradíte túto hodnotu k premennej, na ktorú odkazuje referenčná premenná. Referenčná premenná sa nikdy nemôže vzťahovať na hodnotu NULL. Aritmetiku nemožno vykonať na referenčnej premennej.
Referenčná premenná môže byť použitá tromi spôsobmi:
- Ako funkcia návratovej hodnoty.
- Ako funkčný parameter.
- Ako samostatný odkaz.
Kľúčové rozdiely medzi ukazovateľom a odkazom
- Odkaz je ako vytvoriť iný názov, ktorý má odkazovať na premennú tak, aby ju bolo možné označiť rôznymi názvami. Na druhej strane ukazovateľ je jednoducho pamäťová adresa premennej.
- Proměnná ukazovateľa, ak predchádzala znakom '*', vráti hodnotu premennej, ktorej adresa je uložená v ukazovateľovi varaible. Referenčná premenná, ktorá predchádza znakom '&', vracia adresu tejto premennej.
- Operátory ukazovateľov sú * a ->, zatiaľ čo referenčný operátor je &.
- Pohyblivá ukazovateľ, ak nenesie žiadnu adresu premennej, ukazuje na nulu. Na druhej strane referenčná premenná sa nikdy nemôže vzťahovať na Null.
- Vždy môžete vytvoriť unitializovanú ukazovateľ premennej, ale vytvoríme referenciu, keď budeme potrebovať alias nejakej premennej, takže nikdy nemôžete vytvoriť unitializovanú referenciu.
- Môžete znova inicializovať ukazovateľ, ale akonáhle sa inicializujete, nemôžete znova znovu inicializovať.
- Môžete vytvoriť prázdny ukazovateľ a inicializovať ho kedykoľvek, ale musíte inicializovať refrence iba pri vytváraní referencie.
Poznámka:
Java nepodporuje ukazovatele.
záver
Ukazovateľ a referencia sa používajú na označenie alebo odvolanie inej premennej. Obaja sa však líšia v ich používaní a implementácii.