Kot to že vemo 'kaj je kazalec' , je kazalec spremenljivka, ki shrani naslov druge spremenljivke. Operator dereference je znan tudi kot posredni operator, ki ga predstavlja (*). Ko se posredni operator (*) uporablja s spremenljivko kazalca, je znan kot dereferenciranje kazalca. Ko dereferenciramo kazalec, bo vrnjena vrednost spremenljivke, na katero kaže ta kazalec.
Zakaj uporabljamo dereferencirni kazalec?
Dereferenca kazalca se uporablja zaradi naslednjih razlogov:
- Z njim lahko dostopamo do podatkov, shranjenih na pomnilniški lokaciji, na katero kaže kazalec, ali jih upravljamo.
- Vsaka operacija, uporabljena za dereferencirani kazalec, bo neposredno vplivala na vrednost spremenljivke, na katero kaže.
Oglejmo si naslednje korake za dereferenciranje kazalca.
- Najprej deklariramo celoštevilsko spremenljivko, na katero kaže kazalec.
int x =9;
- Zdaj deklariramo spremenljivko kazalca celo število.
int *ptr;
- Po deklaraciji celoštevilske spremenljivke kazalca shranimo naslov spremenljivke 'x' v spremenljivko kazalca 'ptr'.
ptr=&x;
- Vrednost spremenljivke 'x' lahko spremenimo tako, da dereferenciramo kazalec 'ptr', kot je navedeno spodaj:
*ptr =8;
Zgornja vrstica spremeni vrednost spremenljivke 'x' iz 9 v 8, ker 'ptr' kaže na lokacijo 'x' in dereferenciranje 'ptr', tj. *ptr=8 bo posodobilo vrednost x.
Združimo vse zgornje korake:
#include int main() { int x=9; int *ptr; ptr=&x; *ptr=8; printf('value of x is : %d', x); return 0;}
Izhod
Poglejmo še en primer.
#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; }
V zgornji kodi:
pretvori datum v niz
- Razglasimo dve spremenljivki 'x' in 'y', kjer ima 'x' vrednost '4'.
- Razglasimo kazalčevo spremenljivko 'ptr'.
- Po deklaraciji spremenljivke kazalca dodelimo naslov spremenljivke 'x' kazalcu 'ptr'.
- Ker vemo, da 'ptr' vsebuje naslov spremenljivke 'x', je '*ptr' enak 'x'.
- Vrednost 'x' dodelimo 'y' s pomočjo spremenljivke 'ptr', tj. y=* ptr namesto uporabe spremenljivke 'x'.
Opomba: Če spremenimo vrednost 'x', se po našem mnenju spremeni tudi vrednost 'y', saj kazalec 'ptr' vsebuje naslov spremenljivke 'x'. Vendar se to ne zgodi, saj 'y' shranjuje lokalno kopijo vrednosti '5'.
Izhod
Razmislimo o drugem scenariju.
#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; }
V zgornji kodi:
- Najprej deklariramo spremenljivko 'a'.
- Nato deklariramo dva kazalca, tj. ptr1 in ptr2.
- Oba kazalca vsebujeta naslov spremenljivke 'a'.
- Vrednost '7' dodelimo *ptr1 in '6' *ptr2. Končna vrednost 'a' bi bila '6'.
Opomba: Če imamo več kot en kazalec, ki kaže na isto lokacijo, bo sprememba, ki jo naredi en kazalec, enaka spremembi drugega kazalca.
Izhod