Ponteiros em C – Indireção Múltipla
Indireção Múltipla de Ponteiros
Podemos ter um ponteiro que aponte para um outro ponteiro, o qual por sua vez aponta para uma variável comum com um valor armazenado na memória.
Chamamos a essa técnica de Indireção Múltipla, ou ainda Ponteiros para Ponteiros, em contraste com a Indireção Simples, que ocorre quando um ponteiro aponta para uma variável diretamente.
Um ponteiro comum pode ser representado da seguinte forma:
Já um ponteiro para ponteiro pode ser representado assim:
Um ponteiro para ponteiro deve ser declarado de forma especial. Para isso, adicionamos mais um caractere * na frente do nome da variável ponteiro em sua declaração.
Veja o exemplo seguinte:
int **valor;
Essa declaração cria um ponteiro de nome valor, o qual irá apontar para outro ponteiro, o qual por sua vez aponta para uma variável do tipo int.
Atenção: neste exemplo, valor NÃO é um ponteiro para um número inteiro, e sim um ponteiro para um ponteiro de inteiro.
Acessando o valor apontado com indireção múltipla
Para acessar o valor final armazenado e apontado por um inteiro para ponteiro, usamos o operador ** também. Veja o exemplo a seguir:
#include <stdio.h> #include <stdlib.h> #include <locale.h> int main() { setlocale(LC_ALL, ""); int a = 40; int *pont1; int **pont2; pont1 = &a; pont2 = &pont1; printf("O endereço da variável a é: %p\n", &a); printf("O endereço do ponteiro pont1 é: %p\n", &pont1); printf("O endereço do ponteiro pont2 é: %p\n", &pont2); printf("O endereço apontado por pont1 é %p\n", pont1); printf("O endereço apontado por pont2 é %p\n", pont2); printf("E o valor armazenado em a é: %d\n", **pont2); return 0; }
Neste exemplo de código, criamos uma variável a, do tipo inteiro e cujo conteúdo é o número 40.
Também criamos dois ponteiros: pont1 e pont2. O ponteiro pont1 aponta para a variável a, ao passo que o ponteiro pont2 aponta para o ponteiro pont1.
Na sequência, exibimos na tela o conteúdo de a, seu endereço, e os endereços relacionados aos dois ponteiros criados, usando a função printf().
Veja o código em execução:
Ao executar o programa, vemos que o endereço da variável a é 0x0060FF0c, e que os endereços dos ponteiros pont1 e pont2 são 0x0060FF08 e 0x00FF04, respectivamente.
Vemos então que pont1 aponta para o endereço de final FF0C, que é o endereço da variável a, e que pont aponta para o endereço de final FF08, que é o endereço do ponteiro pont1. E ao lermos o conteúdo apontado por pont2, é mostrado o conteúdo da variável a (40), por meio da indireção múltipla.
Na próxima lição vamos tratar da Inicialização de Ponteiros.
Até!
Anterior: Aritmética de Ponteiros em C
Escreva um comentário