Mint azt már tudjuk 'mi az a mutató' , a mutató egy olyan változó, amely egy másik változó címét tárolja. A hivatkozási operátort indirekt operátornak is nevezik, amelyet (*) jelöl. Ha az indirekt operátort (*) használjuk a mutatóváltozóval, akkor ez az úgynevezett mutató hivatkozásának megszüntetése. Amikor egy mutatóra hivatkozunk, akkor a mutató által mutatott változó értéke kerül visszaadásra.
Miért használunk hivatkozási mutatót?
A mutató hivatkozásának megszüntetése a következő okok miatt történik:
- Használható a mutató által mutatott memóriahelyen tárolt adatok eléréséhez vagy manipulálásához.
- A hivatkozott mutatóra alkalmazott bármely művelet közvetlenül befolyásolja annak a változónak az értékét, amelyre mutat.
Figyeljük meg a következő lépéseket a mutató hivatkozásának megszüntetéséhez.
- Először deklaráljuk azt az egész változót, amelyre a mutató mutat.
int x =9;
- Most deklaráljuk az egész mutató változót.
int *ptr;
- Egy egész mutatóváltozó deklarálása után az 'x' változó címét a 'ptr' mutatóváltozóba tároljuk.
ptr=&x;
- Megváltoztathatjuk az 'x' változó értékét a 'ptr' mutató hivatkozásának megszüntetésével az alábbiak szerint:
*ptr =8;
A fenti sor az 'x' változó értékét 9-ről 8-ra módosítja, mert a 'ptr' az 'x' helyre mutat, és a 'ptr' hivatkozásának megszüntetése, azaz a *ptr=8 frissíti az x értékét.
Kombináljuk a fenti lépéseket:
#include int main() { int x=9; int *ptr; ptr=&x; *ptr=8; printf('value of x is : %d', x); return 0;}
Kimenet
Nézzünk egy másik példát.
#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; }
A fenti kódban:
- Két változót 'x' és 'y' deklarálunk, ahol az 'x' '4' értéket hordoz.
- Egy 'ptr' mutatóváltozót deklarálunk.
- Egy mutatóváltozó deklarálása után a 'ptr' mutatóhoz rendeljük az 'x' változó címét.
- Mint tudjuk, hogy a 'ptr' tartalmazza az 'x' változó címét, így a '*ptr' ugyanaz, mint az 'x'.
- Az 'x' értékét 'y'-hez rendeljük a 'ptr' változó segítségével, azaz y=* ptr az 'x' változó használata helyett.
Megjegyzés: Szerintünk, ha megváltoztatjuk az 'x' értékét, akkor az 'y' értéke is megváltozik, mivel a 'ptr' mutató az 'x' változó címét tartalmazza. De ez nem történik meg, mivel az „y” az „5” érték helyi másolatát tárolja.
Kimenet
Nézzünk egy másik forgatókönyvet.
#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; }
A fenti kódban:
- Először deklarálunk egy „a” változót.
- Ezután deklarálunk két mutatót, azaz a ptr1-et és a ptr2-t.
- Mindkét mutató tartalmazza az 'a' változó címét.
- A *ptr1-hez '7' értéket, a *ptr2-hez pedig '6' értéket rendelünk. Az „a” végső értéke „6” lenne.
Megjegyzés: Ha egynél több mutatónk mutat ugyanarra a helyre, akkor az egyik mutató által végrehajtott változtatás megegyezik egy másik mutatóval.
Kimenet