Jak už to víme 'co je ukazatel' , ukazatel je proměnná, která ukládá adresu jiné proměnné. Operátor dereference je také známý jako nepřímý operátor, který je reprezentován (*). Když je s proměnnou ukazatele použit nepřímý operátor (*), pak se nazývá dereferencování ukazatele. Když dereferencujeme ukazatel, vrátí se hodnota proměnné, na kterou ukazuje tento ukazatel.
Proč používáme ukazatel dereferencování?
Dereference ukazatele se používá z následujících důvodů:
- Lze jej použít pro přístup nebo manipulaci s daty uloženými v místě paměti, na které ukazuje ukazatel.
- Jakákoli operace použitá na dereferencovaný ukazatel přímo ovlivní hodnotu proměnné, na kterou ukazuje.
Podívejme se na následující kroky k dereferenci ukazatele.
- Nejprve deklarujeme celočíselnou proměnnou, na kterou ukazuje ukazatel.
int x =9;
- Nyní deklarujeme proměnnou celočíselného ukazatele.
int *ptr;
- Po deklaraci celočíselné proměnné ukazatele uložíme adresu proměnné 'x' do proměnné ukazatele 'ptr'.
ptr=&x;
- Hodnotu proměnné „x“ můžeme změnit dereferencováním ukazatele „ptr“, jak je uvedeno níže:
*ptr =8;
Výše uvedený řádek mění hodnotu proměnné 'x' z 9 na 8, protože 'ptr' ukazuje na umístění 'x' a dereferencování 'ptr', tj. *ptr=8 aktualizuje hodnotu x.
Pojďme spojit všechny výše uvedené kroky:
#include int main() { int x=9; int *ptr; ptr=&x; *ptr=8; printf('value of x is : %d', x); return 0;}
Výstup
Podívejme se na další příklad.
#include int main() { int x=4; int y; int *ptr; ptr=&x; y=*ptr; *ptr=5; printf('The value of x is : %d',x); printf(' The value of y is : %d',y); return 0; }
Ve výše uvedeném kódu:
- Deklarujeme dvě proměnné 'x' a 'y', kde 'x' má hodnotu '4'.
- Deklarujeme proměnnou ukazatele 'ptr'.
- Po deklaraci ukazatelové proměnné přiřadíme adresu proměnné 'x' ukazateli 'ptr'.
- Protože víme, že 'ptr' obsahuje adresu proměnné 'x', takže '*ptr' je totéž jako 'x'.
- Hodnotu „x“ přiřadíme „y“ pomocí proměnné „ptr“, tj. y=* ptr místo použití proměnné 'x'.
Poznámka: Podle nás, pokud změníme hodnotu 'x', změní se i hodnota 'y', protože ukazatel 'ptr' obsahuje adresu proměnné 'x'. To se však nestane, protože 'y' ukládá místní kopii hodnoty '5'.
Výstup
Zvažme jiný scénář.
#include int main() { int a=90; int *ptr1,*ptr2; ptr1=&a; ptr2=&a; *ptr1=7; *ptr2=6; printf('The value of a is : %d',a); return 0; }
Ve výše uvedeném kódu:
- Nejprve deklarujeme proměnnou 'a'.
- Poté deklarujeme dva ukazatele, tj. ptr1 a ptr2.
- Oba ukazatele obsahují adresu proměnné 'a'.
- Hodnotu '7' přiřadíme *ptr1 a '6' *ptr2. Konečná hodnota 'a' by byla '6'.
Poznámka: Pokud máme více než jeden ukazatel ukazující na stejné místo, pak změna provedená jedním ukazatelem bude stejná jako u jiného ukazatele.
Výstup