Srovnávací graf
Základ pro srovnání | Ukazatel | Odkaz |
---|---|---|
Základní | Ukazatel je adresa paměti proměnné. | Odkaz je alias pro proměnnou. |
Vrací | Proměnná ukazatel vrátí hodnotu umístěnou na adrese uložené v proměnné ukazatele, které předchází znak ukazatele '*'. | Referenční proměnná vrací adresu proměnné, které předchází referenční značka '&'. |
Operátoři | *, -> | & |
Null Reference | Proměnná ukazatel může odkazovat na NULL. | Referenční proměnná nemůže nikdy odkazovat na NULL. |
Inicializace | Lze vytvořit neinicializovaný ukazatel. | Nikdy nelze vytvořit neinicializovaný odkaz. |
Čas inicializace | Proměnná ukazatele může být inicializována v libovolném okamžiku v programu. | Referenční proměnná může být inicializována pouze v okamžiku jejího vytvoření. |
Reinicializace | Proměnnou ukazatele lze podle potřeby znovu inicializovat. | Referenční proměnná nemůže být v programu nikdy znovu inicializována. |
Definice ukazatele
„Ukazatel“ je proměnná, která uchovává umístění paměti jiné proměnné. Operátory používané proměnnou pointer jsou * a ->. Deklarace proměnné ukazatele obsahuje základní typ dat následovaný znakem '*' a názvem proměnné.
typ * var_name;
Pojďme pochopit ukazatel pomocí příkladu.
int a = 4; int * ptr = & a; cout <Zde máme celočíselnou proměnnou a, ukazatel proměnné ptr, který ukládá adresu proměnné a.
Ukazatel aritmetiky
Proměnnou ukazatele lze ovládat dvěma aritmetickými operátory, kterými jsou „sčítání“ a „odečítání“. Přidání se nazývá „přírůstek“ a odčítání se označuje jako „snížení“. Když je proměnná ukazatele zvýšena, ukazuje na umístění paměti následující proměnné základního typu. Jelikož je proměnná ukazatele snížena, ukazuje na umístění paměti předchozí proměnné základního typu. Pole lze tedy efektivně přistupovat k proměnné ukazatele.
Vícenásobný směr
Ukazatel ukazuje na druhou proměnnou ukazatele, která ukazuje na cílovou hodnotu. Tento typ ukazatele je vždy inicializován s adresou jiné proměnné ukazatele. Prohlášení ukazatele na ukazatel je následující.
typ ** var_name;Podívejme se na to s příkladem.
int a = 4; int * ptr1 = & a; int ** ptr2 = & ptr1; cout <Funkční ukazatel
Protože víme, že funkce není proměnná, má stále paměťové místo, které může být přiřazeno proměnné ukazatele. Jakmile ukazatel ukazuje na funkci, lze funkci vyvolat pomocí ukazatele funkce.
Důležité body k zapamatování o ukazateli.
- Proměnná ukazatele může být vytvořena bez jeho inicializace a může být inicializována kdekoli v programu.
- Proměnnou ukazatele lze znovu inicializovat na jinou proměnnou.
- Proměnná ukazatel může odkazovat na NULL.
Definice odkazu
Referenční proměnná se používá k označení proměnné, která je přiřazena této referenční proměnné. Operátor použitý referenční proměnnou je '&'. Deklarace referenční proměnné obsahuje základní typ následovaný znakem „&“ a potom názvem proměnné.
type & refer_var_name = název_ var_;Zde je typ datový typ, operátor & potvrzuje, že se jedná o referenční proměnnou. Název reference_var_name je název referenční proměnné. Var_name je název proměnné, na kterou chceme odkazovat referenční proměnnou.
Pojďme pochopit referenční proměnnou pomocí příkladu.
int a = 4; int & b = a; // b označuje ab = 6; // nyní a = 6Proměnná typu int je zde přiřazena hodnota 4. Referenční proměnná je přiřazena proměnné a, tj. B je alias a. Když přiřadíme další hodnotu b, upravíme hodnotu a. Lze tedy říci, že změny provedené v referenční proměnné se také objeví v proměnné, na kterou tato referenční proměnná odkazuje.
Nejdůležitějším bodem je, že referenční proměnná musí být inicializována v okamžiku jejího vytvoření. Jakmile je referenční proměnná inicializována proměnnou, nemůže být znovu inicializována tak, aby odkazovala na jinou proměnnou. V okamžiku, kdy přiřadíte hodnotu referenční proměnné, přiřadíte tuto hodnotu proměnné, na kterou odkazuje referenční proměnná. Referenční proměnná nemůže nikdy odkazovat na NULL. Aritmetiku nelze provést na referenční proměnné.
Referenční proměnnou lze použít třemi způsoby:
- Jako funkce vrací hodnotu.
- Jako parametr funkce.
- Jako samostatný odkaz.
Klíčové rozdíly mezi ukazatelem a odkazem
- Odkaz je jako vytvořit jiný název, který bude odkazovat na proměnnou tak, aby mohl být odkazován na jiné názvy. Na druhou stranu je ukazatel jednoduše adresou paměti proměnné.
- Proměnná ukazatele, pokud předchází znakem *, vrátí hodnotu proměnné, jejíž adresa je uložena v ukazateli proměnná. Referenční proměnná, která předchází znaku „&“, vrátí adresu této proměnné.
- Operátory ukazatelů jsou * a -> zatímco referenční operátor je &.
- Proměnná ukazatele, pokud nenese žádnou proměnnou, na kterou odkazuje null. Na druhou stranu, referenční proměnná nikdy nemůže odkazovat na Null.
- Vždy můžete vytvořit jednotkovou proměnnou ukazatele, ale vytvoříme odkaz, když potřebujeme alias nějaké proměnné, abyste nikdy nemohli vytvořit odkaz unitialize.
- Můžete znovu inicializovat ukazatel, ale po inicializaci arefernce jej nelze znovu inicializovat.
- Můžete vytvořit prázdný ukazatel a inicializovat jej kdykoliv, ale budete muset inicializovat refrence pouze tehdy, když vytvoříte referenci.
Poznámka:
Java nepodporuje ukazatele.
Závěr
Ukazatel a odkaz se používají k označení nebo odkazování jiné proměnné. Obě se však liší svým používáním a implementací.