Rozdíl mezi referencí C ++ a ukazatelem

Přestože se zdá, že odkaz na ukazatel C ++ je podobný, existuje významný rozdíl mezi oběma odkazy C ++ a ukazatelem. Referenční proměnnou lze říci jako jiné jméno pro existující proměnnou. Po inicializaci této proměnné lze název proměnné použít k odkazu na jinou proměnnou. Ukazatele jsou naopak proměnné, které ukládají adresu proměnné. Jako každá proměnná jsou tyto deklarovány jako první a poté lze do nich uložit adresu libovolné proměnné. Podívejme se podrobně na rozdíly mezi C ++ Reference a Ukazatelem níže.

Porovnání typu hlava-hlava mezi referencí C ++ a ukazatelem (infografika)

Níže je seznam nejlepších 7 rozdílů mezi referencí C ++ a ukazatelem

Klíčové rozdíly mezi referencí C ++ a ukazatelem

Oba C ++ Reference vs Ukazatel jsou populární volby na trhu; pojďme diskutovat o některých hlavních rozdílech mezi referencí C ++ a ukazatelem:

Hlavním rozdílem mezi referencí C ++ a ukazatelem je to, že jeden odkazuje na jinou proměnnou, zatímco druhá ukládá adresu proměnné. Odkazy neprovedou změnu v původní proměnné, zatímco pokud se změní ukazatel, ovlivní původní proměnnou. Odkaz musí být inicializován při deklaraci, zatímco není nutné inicializovat ukazatel, jakmile je deklarován. Lze vytvořit pole ukazatelů, zatímco pole odkazů nelze vytvořit. Nulové hodnotě nelze přiřadit k odkazu, ale lze ji přiřadit ukazateli.

Srovnávací tabulka C ++ versus ukazatel

Primární srovnání mezi referencí C ++ a ukazatelem je popsáno níže:

Základ srovnání mezi referencí C ++ a ukazatelemReference C ++Ukazatel
ProměnnéOdkaz lze říci jako alias existující proměnné. Hlavní použití této proměnné funguje jako parametr, který funguje jako reference pass-by-reference. Toto je předáno funkci. Funkce, na kterou je předán, pracuje na původní proměnné namísto kopie v předávané hodnotě. Změny provedené uvnitř funkce se projeví také venku.Proměnné ukazatele jsou proměnné, které ukládají adresu. Na rozdíl od obvyklých proměnných, které máme rádi, int, double a char to ukládá paměťové adresy. Pro usnadnění programování vyvstává potřeba této proměnné. Je to proměnná, která může uložit hodnotu konkrétního typu.
ProhlášeníDeklarace referenční proměnné C ++ se provádí přidáním symbolu „&“ před proměnnou. Pokud je použit s výrazem, znamená to, že pracuje jako adresa operátora. Používá se k poskytnutí jiného názvu pro existující proměnnou.
Syntax:
type & newName = existName ;
// nebo
type & newName = existName ;
// nebo
type & newName = existName ;
Například:
/ * Prohlášení a inicializace referenčního testu * /
#zahrnout
pomocí oboru názvů std;
int main () (
název řetězce = „Priya“; // Vyhlásit řetězcovou proměnnou s názvem name
string & refName = name; // Vyhlásit odkaz (alias) na název proměnné
// Jak refName, tak name se vztahují ke stejné hodnotě „Priya“
cout << jméno << endl; // Vytiskne hodnotu proměnné „Priya“
cout << refName << endl; // Vytiskne hodnotu reference „Priya“
Nyní změňte hodnotu názvu
refName = „Karishma“; // Přiřaďte nové hodnotě refName
cout << refName << endl;
cout << jméno << endl; // Hodnota čísla také mění „Karishma“
name = “Snehal”; // K názvu přiřaďte novou hodnotu
cout << namer << endl;
cout << refName << endl; // Hodnota refName také mění „Snehal“
)
To znamená, že hodnoty referenční proměnné lze změnit v originálu a kopii proměnné.
Před použitím ukazatele kdekoli v programu by měl být deklarován předem. Pro deklaraci ukazatele a informování systému, že se jedná o ukazatel, je před proměnnou předpona '*'. Ukazatel je doprovázen datovým typem, kterým může být int nebo double, atd.
Syntax:
type * pntr ; // Deklarovat proměnnou ukazatele nazvanou pntr jako ukazatel typu
// nebo
type * pntr ;
// nebo
type * pntr ;
Například:
int * newPtr; // Deklarovat proměnnou ukazatele nazvanou newPtr směřující na int (ukazatel int)
Tento ukazatel bude držet adresu. Tato adresa má int hodnotu.
double * newdPtr; // Vyhlásit dvojitý ukazatel
Symbol * označuje, že ukazatel je deklarován a nepůsobí jako operátor.
Změna přiřazeníReferenční proměnnou nelze přiřadit.
Příklad:
int x = 5;
int y = 6;
int & r = x;
Ukazatel lze přiřadit a tato vlastnost se hodí, když vývojář implementuje datové struktury, jako jsou propojené seznamy, stromy atd.
Příklad:
int x = 5;
int y = 6;
int * p;
p = & x;
p = & y;
Adresa pamětiReferenční proměnná sdílí stejnou adresu jako původní proměnná. Tyto odkazy mohou být předávány různým funkcím, mohou být uloženy v různých třídách atd. Odkaz nikdy neukazuje na novou proměnnou, dokud stará není odstraněna nebo nepřekročí rozsah.Ukazatel má svou vlastní paměťovou adresu a uloží ji do zásobníku. Ukazatel je nezávislá proměnná a může mít přiřazeny nové hodnoty.
Null ValueOdkaz nemůže mít přiřazenu nulovou hodnotu.Ukazatel může mít přímo přiřazenou nulovou hodnotu.
ArgumentyReferenční proměnnou lze odkazovat na bypass podle hodnoty. Zde jsou argumentům předávány funkce. Vytvoří se klon a odešle se do funkce pomocí této funkce. Změny provedené na kopii nemají žádný vliv na původní proměnnou.Pokud chceme změnit původní kopii, lze to provést předáním ukazatele objektu do funkce. Toto je známé jako projít odkazem.
Kdy použítOdkazy nepřímo přistupují k proměnné. Zvažte následující příklad:
enum den
(
Neděle pondělí, …
);
Pokud definujeme proměnnou
den x;
A chceme přetížit operátora příkazem, pak můžeme napsat níže:
den a operátor ++ (den a d)
(
d = (den) (d + 1);
návrat d;
)
Stručně řečeno, to lze použít ve funkčních parametrech a referenčních typech.
Použití ukazatelů je bez předběžného prohlášení.
den * operátor ++ (den * d);
To lze použít k implementaci datových struktur a ukazatelových aritmetických operací.

Závěr - Reference C ++ vs ukazatel

Na C ++ Reference vs Ukazatel se obtížně pracuje, ale do značné míry zlepšují účinnost programu. Oba C ++ Reference vs Ukazatel mají svá vlastní použití a slouží vlastním účelům. Ukazatele můžete použít, pokud chcete implementovat datové struktury a algoritmy, zatímco odkazy, pokud chcete používat funkce a parametry s návratovými typy.

Doporučený článek

Toto byl průvodce nejvyššími rozdíly mezi C ++ Reference a Ukazatelem. Zde diskutujeme také klíčové rozdíly v C ++ Reference vs Ukazatel s infografikou a srovnávací tabulkou. Další informace naleznete také v následujících článcích -

  1. Python vs. C ++ rozdíly
  2. C vs C ++ výkon - nejlepší rozdíly
  3. MongoDB vs Cassandra
  4. Mobx vs Redux
  5. C ++ Vector vs Array: Největší rozdíly
  6. MongoDB vs DynamoDB: Funkce
  7. MongoDB vs SQL: Jaké jsou funkce
  8. C vs C #: Funkce

Kategorie: