Como já sabemos disso 'o que é um ponteiro' , um ponteiro é uma variável que armazena o endereço de outra variável. O operador de desreferência também é conhecido como operador indireto, representado por (*). Quando o operador indireto (*) é usado com a variável ponteiro, ele é conhecido como desreferenciando um ponteiro. Quando desreferenciamos um ponteiro, o valor da variável apontada por este ponteiro será retornado.
Por que usamos o ponteiro de desreferenciação?
A desreferência de um ponteiro é usada pelos seguintes motivos:
- Ele pode ser usado para acessar ou manipular os dados armazenados no local da memória apontado pelo ponteiro.
- Qualquer operação aplicada ao ponteiro desreferenciado afetará diretamente o valor da variável para a qual ele aponta.
Vamos observar as etapas a seguir para desreferenciar um ponteiro.
- Primeiro, declaramos a variável inteira para a qual o ponteiro aponta.
int x =9;
- Agora, declaramos a variável ponteiro inteiro.
int *ptr;
- Após a declaração de uma variável ponteiro inteira, armazenamos o endereço da variável 'x' na variável ponteiro 'ptr'.
ptr=&x;
- Podemos alterar o valor da variável 'x' desreferenciando um ponteiro 'ptr' conforme mostrado abaixo:
*ptr =8;
A linha acima altera o valor da variável 'x' de 9 para 8 porque 'ptr' aponta para a localização 'x' e desreferenciação de 'ptr', ou seja, *ptr=8 atualizará o valor de x.
Vamos combinar todas as etapas acima:
#include int main() { int x=9; int *ptr; ptr=&x; *ptr=8; printf('value of x is : %d', x); return 0;}
Saída
Vamos considerar outro exemplo.
#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; }
No código acima:
- Declaramos duas variáveis 'x' e 'y' onde 'x' contém um valor '4'.
- Declaramos uma variável ponteiro 'ptr'.
- Após a declaração de uma variável ponteiro, atribuímos o endereço da variável 'x' ao ponteiro 'ptr'.
- Como sabemos que 'ptr' contém o endereço da variável 'x', então '*ptr' é igual a 'x'.
- Atribuímos o valor de 'x' a 'y' com a ajuda da variável 'ptr', ou seja, y = * PTR em vez de usar a variável 'x'.
Nota: Segundo nós, se alterarmos o valor de 'x', então o valor de 'y' também será alterado, pois o ponteiro 'ptr' contém o endereço da variável 'x'. Mas isso não acontece, pois 'y' está armazenando a cópia local do valor '5'.
Saída
Vamos considerar outro cenário.
#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; }
No código acima:
função estática em java
- Primeiro, declaramos uma variável 'a'.
- Então declaramos dois ponteiros, ou seja, ptr1 e ptr2.
- Ambos os ponteiros contêm o endereço da variável 'a'.
- Atribuímos o valor '7' ao *ptr1 e '6' ao *ptr2. O valor final de 'a' seria '6'.
Nota: Se tivermos mais de um ponteiro apontando para o mesmo local, a alteração feita por um ponteiro será igual a de outro ponteiro.
Saída