Než budeme diskutovat o rozdílu mezi ukazatelem a odkazem, podívejme se nejprve krátce na význam těchto dvou termínů. V programu data zabírají paměť. Přesné umístění paměti, do které byla data uložena v době provedení, by mělo být známé, aby k nim byl přístup. Proměnné ukazatele a referenční proměnné slouží k přístupu k těmto datům ak manipulaci s adresami paměti, na kterých jsou. To znamená, že ukazatele i odkazy lze použít k nepřímému odkazování na objekty. Jako své hodnoty v podstatě drží adresy paměti. klíčový rozdíl mezi ukazatelem a odkazem je to ukazatel je proměnná, která ukládá adresu umístění paměti jiné proměnné zatímco reference je proměnná, která odkazuje na jinou proměnnou. Dva mechanismy, ukazatel a odkazy, mají odlišnou syntaxi a použití.
Ukazatel je objekt programovacího jazyka, který ukládá adresu paměti hodnoty v počítačové paměti.
int i = 5;
int * ptr = & i;
První řádek definuje proměnnou inicializovanou hodnotou 5. Druhý řádek definuje ukazatel na adresu paměti proměnné. Zde je 'ptr' deklarován jako objekt typu 'ukazatel na int', jehož počáteční hodnota je adresa objektu i. Proměnná ptr v podstatě ukazuje na i uložením její paměti.
Vyvolá se získání hodnoty uložené v paměti dereferencing. Operátor * se používá k odcizení ukazatele. Po provedení deklarací se nepřímý výraz * ptr dereference ptr odkazuje na i.
Ke změně hodnoty i lze použít následující přiřazení;
* ptr = 20;
Ukazatele mohou být také přiřazeny k odkazům na různé objekty.
A nulový ukazatel je speciální typ ukazatele. Nulový ukazatel je často označován jako 0 nebo null a ukazuje na nic. Je dobré použít nulový ukazatel v případě, že k přesnému ukazateli není přiřazena přesná adresa. Toto přiřazení lze použít v logických operacích a podmínkách.
Ukazatele mohou být slouží k ukládání a správě adres dynamicky přidělené paměti. Implementace a řízení datových struktur, jako jsou hromádky, fronty a seznamy, může být efektivní pomocí ukazatelů. Například fronta může mít dva ukazatele; ukazovátko hlavy a ukazovátko Ukazatele lze také použít k předávání proměnných podle jejich adresy, což by umožnilo změnu hodnoty. Přímá manipulace s pamětí nebo zařízení mapovaná na paměť lze také zpracovat pomocí ukazatelů.
Ukazatele umožňují chráněný i nechráněný přístup k adresované paměti. Proto je třeba přijmout nezbytná opatření k ověření, zda je obsah ukazatele platný. Jinak by dereferencování ukazatele s neplatnou adresou paměti mohlo způsobit selhání programu.
Ukazatele jsou podporovány v jazycích, jako jsou C, C ++, Pascal a mnoho jazyků sestavení.
Ukazatel A ukazuje na paměťovou adresu spojenou s proměnnou b.
Reference je prostě alternativní identifikátor pro hodnotu uloženou v paměti. Umožňuje programu nepřímý přístup k určitému počátečnímu bodu.
int i = 5;
int & ref = i;
První řádek definuje proměnnou inicializovanou hodnotou 5. Druhý řádek deklaruje „ref“ jako objekt typu „reference na int“, který odkazuje na i. Odkaz se liší od samotných dat, protože je implementován jako fyzická adresa konkrétního počátku uložená v paměti.
Po definování nelze k nové hodnotě přiřadit odkaz. Odkaz vždy odkazuje na objekt, s nímž je inicializován. V následujícím přiřazení odkaz stále odkazuje na i, ale hodnota je nyní 20.
ref = 20;
Podle výše uvedeného příkladu odkazy na dereferencování nevyžadují žádné operátory.
Odkazy lze použít, když proměnná vždy odkazuje na objekt. Důvodem je, že na rozdíl od ukazatelů nemohou být odkazy nulové a musí být vždy přiřazeny při inicializaci. Protože odkazy musí vždy odkazovat na nějaký objekt, vytvoření takové proměnné jako reference zajistí, že program bude fungovat efektivně a správně. Vzhledem k tomu, že neexistují žádné nulové reference, není nutné testovat platnost referenční proměnné.
Referenční proměnné mohou být slouží k efektivnímu předávání velkých dat jako argumentů procedurám. Odkazy se také používají při sdílení velkých dat mezi různými oblastmi kódu, protože každý kód si uchovává odkaz na data.
Programovací jazyky jako C ++, Java, Python, Perl, PHP, Ruby atd. Podporují odkazy.
Ukazatel: Ukazatel je adresa paměti objektu uloženého v počítačové paměti.
Odkaz: Odkaz je alternativní identifikátor nebo alias objektu.
Ukazatel: Ukazatel je deklarován operátorem *.
Odkaz: Odkaz je deklarován operátorem &.
Ukazatel: Proměnná ukazatele vyžaduje, aby byl operátor * dereferencován.
Odkaz: Referenční proměnná vyžaduje, aby žádný operátor nebyl dereferencován.
Ukazatel: Ukazatele lze inicializovat na null. Takové proměnné se nazývají nulové ukazatele.
Odkaz: Odkazy nelze inicializovat na null. Neexistuje nic jako nulová reference. Odkaz musí vždy odkazovat na objekt.
Ukazatel: Proměnná ukazatele může být přiřazena tak, aby odkazovala na různé objekty.
Odkaz: Referenční proměnnou nelze přiřadit. Vždy odkazuje na objekt, se kterým byl inicializován.
Ukazatel: Proměnné ukazatele by se měly použít, pokud existuje možnost odkazovat na nic, nebo když je třeba odkazovat na různé věci v různých časech.
Odkaz: Referenční proměnné by měly být použity, když bude vždy existovat objekt, na který se má odkazovat, a když není nutné používat tuto referenční proměnnou k odkazu na cokoli jiného než tento objekt.
Ukazatel: Proměnné ukazatele lze použít k implementaci algoritmů a datových struktur.
Odkaz: Referenční proměnné lze použít ve funkčních parametrech a návratové typy definují užitečná rozhraní.
Ukazatel: Ukazatele podporují programovací jazyky, jako jsou C, C ++, Pascal a mnoho jazyků sestavení.
Odkaz: Programovací jazyky jako C ++, Java, Python, Perl, PHP, Ruby atd. Podporují odkazy.
Zdvořilost obrázku: „Ukazatele“ od tohoto souboru vytvořil uživatel: SvenTranslation.Own work.This vektorový obrázek byl vytvořen pomocí Inkscape. (CC BY-SA 3.0) přes Commons -