Ukazatel a odkaz
Obě ukazatele a odkazy jsou nejvýkonnějšími funkcemi v jazyce C a C ++, které umožňují programátorům manipulovat s adresou paměti přímo pro efektivní správu paměti.
Oba jsou proměnné, které se používají k nepřímému odkazu na jiné objekty a mají na povrchu určité společné rysy. Přestože mají spoustu společných schopností, jsou také velmi srozumitelné.
Ukazatel je proměnná, která drží paměťovou adresu jiné proměnné, zatímco odkaz je jako ukazatel, který lze použít k nepřímému odkazu na jinou proměnnou.
Většina programátorů se zdá, že rozvíjejí určité chápání toho, kdy používat ukazatele a kdy používat odkazy, ale často se setkávají s problémy, jejichž řešení je nejasné.
Abychom lépe pochopili filozofii, pochopíme rozdíl mezi těmito dvěma.
Co je ukazatel?
Každá proměnná je paměťové místo, které je definováno její adresou a je spárováno s identifikátorem, který obsahuje určitou hodnotu, která může být v průběhu programu změněna. Jednoduše řečeno, proměnná je symbol, který představuje množství.
Ukazatel je proměnná, která obsahuje adresu paměti jiné proměnné. Ukazatel není nic jiného než adresa a proměnná, která ukládá ukazatel, se nazývá ukazatel proměnné.
Myšlenkou je použití identifikátorů (nebo jmen) namísto číselných adres k ulehčení zátěže programování, čímž se snižuje složitost programů. Vzhledem k tomu, že tyto adresy odkazují na skutečné umístění v paměti počítače, mohou být k přístupu a manipulaci s obsahem uloženým v paměti použity ukazatele.
Stejně jako jakákoli proměnná nebo konstanta, ukazatele musí být deklarovány pro jejich typy. Vzhledem k tomu, že ukazatele obsahují adresy paměti, které patří k samostatnému datovému typu, musí být deklarovány pomocí ukazatelů, než s nimi můžete pracovat. Obecná forma deklarace ukazatele je:
Datový typ * var-name;
Zde je "typ_typu" základním typem ukazatele a "var-name" je ukazatel proměnné. Hvězdička (*) se zde používá k deklarování ukazatele, který označuje proměnnou "var-name" jako ukazatel proměnné.
int * p; // celočíselný ukazatel
float * x; // float ukazatel
Zde proměnná "p" odkazuje na celočíselný datový typ, který je deklarován jako "int", který se vztahuje k datovému typu proměnné. Podobně ve druhém příkladu "float" označuje datový typ proměnné "x", která je ve skutečnosti označena jako ukazatel proměnné s pohyblivou čárkou.
Co je odkaz?
Odkaz je jako ukazatel s nepřímým přístupem k proměnné. Je to jako alias pro jinou proměnnou, což znamená, že je jiná jména pro již existující proměnnou.
Umožňuje programátorům vytvořit druhý název proměnné, kterou mohou manipulovat s obsahem uloženým v této proměnné. Je to entita, která je aliasem jiné proměnné a má stejnou adresu jako původní proměnná. Podporuje průchod odkazem, který funguje jako funkční formální parametry a jakmile je definován jako odkaz na proměnnou, nemůže být znovu uložen, což znamená, že nemůže být odkazováno na jinou proměnnou.
Na rozdíl od ukazatelů nepotřebují operátor dereferencing přístup k hodnotě; ve skutečnosti je lze použít jako normální proměnné.
int i;
int & ri = i;
Zde "ri" je celočíselná reference inicializovaná na "i". Deklaruje "ri" jako objekt typu "reference to int". Odkaz lze snadno zaměňovat s ukazatelem, který je nezávislou proměnnou, jejíž adresa nemůže být znovu přiřazena po vytvoření.
Rozdíl mezi ukazatelem a referencí
- Oba poskytují téměř podobné schopnosti, pokud jde o použitelnost a rozlišení může být obtížné. Ukazatel je pouze proměnná, která ukládá adresu paměti jiné proměnné, zatímco odkaz je jako alias pro již existující proměnnou. Vytvoří druhý název proměnné, která může být použita k úpravě obsahu uloženého v této proměnné.
- ukazatel je jako každá jiná proměnná, která ukládá datový soubor. Na rozdíl od jiných proměnných ukládají proměnné ukazatele namísto hodnot paměti adresy paměti. Ukazatel je dereferenční pomocí operátoru * pro přístup k paměťovému místu proměnné, na kterou odkazuje. Odkaz, na druhé straně, nepotřebuje žádný operátor dereferencing k přístupu k hodnotě.
- Na rozdíl od ukazatelů, které lze kdykoli inicializovat, musí být reference přiřazeny při inicializaci. Ukazatele lze přistupovat přímo, zatímco odkazy nelze přímo zpřístupnit.
- Proměnná ukazatele má svou vlastní polohu v paměti, což znamená, že když deklarujete ukazatel, určíte místo, které je adresou paměti přiřazenou každé jednotce paměti. Proměnná ukazatele má stejnou adresu, kde je uložena v paměti. Referenční proměnná je na druhé straně alias pro další proměnnou, čímž se přejímá adresa referenční proměnné.
- NULL představuje konec seznamu, což znamená, že hodnota je neznámá a určuje, že proměnná nemá platný adresní prostor. Hodnota NULL může být přímo přiřazena ukazateli proměnné, což naznačuje, že nikde nikde nenaznačuje, zatímco NULL nemůže být přiřazena referenční proměnné.
Pointer vs. Reference: Srovnávací graf
Shrnutí ukazatele versus odkaz
Ukazatele byly vždy mezi oblíbenými tématy diskuze programátorů C / C ++, dokud se na obrázek nezobrazily odkazy. Odkazy jsou poněkud podobné ukazatelům, ale mají ve srovnání s jejich spravedlivým podílem pro a proti. Zatímco oba mohou být použity pro změnu lokálních proměnných jedné funkce v rámci jiné funkce, mají své rozdíly. Oba jsou výkonné funkce v jazyce C a C ++, které umožňují přímo manipulovat s pamětí, ale s několika výjimkami. Ukazatel má paměťovou adresu proměnné, zatímco odkaz je jen alias jiné proměnné.