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:

Ponteiros em C - Indireção Simples

Já um ponteiro para ponteiro pode ser representado assim:

Ponteiros em C - Indireção Múltipla

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:

Indireção múltipla em ponteiros em linguagem C

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

 

Sobre Fábio dos Reis (1182 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Astronomia, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

1 Trackbacks & Pingbacks

  1. Ponteiros em C - Aritmética de Ponteiros - Bóson Treinamentos em Tecnologia

Escreva um comentário

Seu e-mail não será divulgado


*