Essa é a pergunta campeã em sala de aula, por isso resolvi compartilhar aqui. Então vamos lá!
Se voltarmos à definição de variável, que é um espaço alocado na memória, podemos imaginar o seguinte:
1 - Quando declaramos uma variável, um espaço é reservado/alocado na memória do seu computador.
2 - Esse espaço que foi reservado/alocado tem um nome que foi dado pelo programador. Ex: int minha_variavel;
3 - Mesmo definindo um nome para a variável (no caso acima "minha_variavel") ela possui um endereço físico, por exemplo 0x4A1, que é o endereço de memória onde a variável, de fato, reside.
Pois bem, o que geralemente explico é que um ponteiro nada mais é do que uma variável que guarda o endereço de outra variável ou mesmo um endereço de memória. A imagem abaixo demonsta bem isso.
No caso acima, a variável "A" possui o valor "5" e o endereço de memória "0x3E8", já o ponteiro "p" possui o valor do "0x3E8" que é o endereço de "A" e possui seu próprio endereço "0x3C0".
Pronto, sabendo disso, podemos demostrar um algoritmo exemplo, mas antes precisamos saber a sintaxe de declaração de ponteiros, que para a linguagem C (o exemplo abaixo foi feito no DEV C++) é apenas colocar um asterísco antes do nome do ponteiro, como pode ser visto na linha 6 do algoritmo exemplo.
Seguindo o algoritmo exemplo, verificamos que na linha 8 a variável "a" recebe o valor inteiro 32, e na sequência (linha 9) o ponteiro "b" recebe o endereço de memória de "a" (o & na linguagem C é o operador de endereço, retornando o endereço físico da variável), ou seja, "b" aponta para "a", por isso chamamos de ponteiro!
Por fim, fiz vários printf's para demonstrar o valor de cada um dos elementos envolvidos. Perceba que na linha 15 imprimo o ponteiro "b" precidido de um asterísco "*", que nesse caso significa que será impresso o conteúdo de quem o ponteiro "b" aponta (não confunda com o asterísco na declaração do ponteiro!).
- #include
- #include
- main(){
- int a;
- int *b;
- a = 32;
- b = &a;
- printf("Eu sou o conteudo de A: %d\n", a);
- printf("Eu sou o endereco de A: %x\n", &a);
- printf("Eu sou o conteudo de B: %x\n", b);
- printf("Eu sou o endereco de B: %x\n", &b);
- printf("Eu sou o A através de B: %d\n", *b);
- system("pause");
- }
É isso, espero que esse post ajude a entender nossos famosos ponteiros!
Um abraço!
Nenhum comentário:
Postar um comentário