Както вече го знаем 'какво е указател' , указателят е променлива, която съхранява адреса на друга променлива. Операторът за дереференция е известен също като оператор за индиректност, който е представен с (*). Когато се използва индиректен оператор (*) с променливата на указателя, той е известен като дерефериране на указател. Когато дереферираме указател, тогава ще бъде върната стойността на променливата, посочена от този указател.
Защо използваме дерефериращ указател?
Дереферирането на указател се използва поради следните причини:
маркдаун зачертано
- Може да се използва за достъп или манипулиране на данните, съхранявани в мястото на паметта, което е посочено от показалеца.
- Всяка операция, приложена към дереферирания указател, ще повлияе директно на стойността на променливата, към която сочи.
Нека наблюдаваме следните стъпки за дерефериране на указател.
- Първо декларираме целочислената променлива, към която сочи указателят.
int x =9;
- Сега декларираме променливата на целочислен указател.
int *ptr;
- След декларирането на целочислена указателна променлива, ние съхраняваме адреса на променливата 'x' към указателната променлива 'ptr'.
ptr=&x;
- Можем да променим стойността на променливата 'x' чрез дерефериране на указател 'ptr', както е дадено по-долу:
*ptr =8;
Горният ред променя стойността на променливата „x“ от 9 на 8, тъй като „ptr“ сочи към местоположението „x“ и дереферирането на „ptr“, т.е. *ptr=8 ще актуализира стойността на x.
Нека комбинираме всички горни стъпки:
сортиране на мехурчета
#include int main() { int x=9; int *ptr; ptr=&x; *ptr=8; printf('value of x is : %d', x); return 0;}
Изход
Нека разгледаме друг пример.
#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; }
В горния код:
- Декларираме две променливи „x“ и „y“, където „x“ съдържа стойност „4“.
- Декларираме указателна променлива 'ptr'.
- След декларирането на променлива указател, ние присвояваме адреса на променливата 'x' на указателя 'ptr'.
- Тъй като знаем, че 'ptr' съдържа адреса на променливата 'x', така че '*ptr' е същото като 'x'.
- Присвояваме стойността на 'x' на 'y' с помощта на променливата 'ptr', т.е. y=* ptr вместо да използвате променливата 'x'.
Забележка: Според нас, ако променим стойността на 'x', тогава стойността на 'y' също ще се промени, тъй като указателят 'ptr' съдържа адреса на променливата 'x'. Но това не се случва, тъй като 'y' съхранява локалното копие на стойност '5'.
Изход
Нека разгледаме друг сценарий.
parseint java
#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'.
- След това декларираме два указателя, т.е. ptr1 и ptr2.
- И двата указателя съдържат адреса на променливата 'a'.
- Присвояваме стойност '7' на *ptr1 и '6' на *ptr2. Крайната стойност на 'a' ще бъде '6'.
Забележка: Ако имаме повече от един указател, сочещ към едно и също местоположение, тогава промяната, направена от един указател, ще бъде същата като друг указател.
Изход