aula 191

Existe ponteiro pra ponteiro?

Dando continuidade ao estudo dos ponteiros aqui em nosso Curso de Programação C, vamos responder a seguinte pergunta: Existe ponteiro pra ponteiro?

SIM! Claro que existe!

Temos um ponteiro pra ponteiro quando uma variável do tipo ponteiro guarda um endereço de memória de outra variável que também é um ponteiro.

Observe o exemplo de código a seguir. A variável A é do tipo int. A variável B é um ponteiro para um inteiro e a variável C é um ponteiro pra ponteiro de inteiro.

    // A - variável inteira
    // B - ponteiro para um inteiro
    // C - ponteiro para um ponteiro para um inteiro

    int A = 100, *B, **C;

A variável B é um ponteiro para um inteiro. Assim, ela pode receber o endereço da variável A, que é do tipo int, mas não pode receber o endereço da variável C.

Em contrapartida, a variável C é um ponteiro pra ponteiro do tipo int. Assim, a variável C pode receber o endereço da variável B mas não pode receber o endereço da variável A.

Já vimos que para acessar o conteúdo apontado por um ponteiro basta escrevermos o nome do ponteiro com um asterisco ( * ) à esquerda. Para acessar o conteúdo de um ponteiro pra ponteiro basta escrevermos o nome do ponteiro com dois asteriscos ( ** ) à esquerda, assim:

    printf("Conteudo apontado por C: %d\n", **C);

Perceba que esta ideia se propaga adiante. Podemos ter:
– ponteiro (int *B);
– ponteiro pra ponteiro(int **C);
– ponteiro pra ponteiro pra ponteiro(int ***D);
e assim por diante. É o problema que você está resolvendo que vai determinar a necessidade ou não de ponteiros encadeados.

Exemplo completo em C de ponteiro pra ponteiro

*/

          Aula 191: O que é ponteiro para ponteiro?

          Código escrito por Wagner Gaspar
          Maior de 2021
*/

int main(){

    int A = 100, *B, **C;

    B = &A;
    C = &B;

    printf("Endereco de A: %p\tConteudo de A: %d\n", &A, A);
    printf("Endereco de B: %p\tConteudo de B: %p\n", &B, B);
    printf("Conteudo apontado por B: %d\n", *B);
    printf("Endereco de C: %p\tConteudo de C: %p\n", &C, C);
    printf("Conteudo apontado por C: %d\n", **C);

    return 0;
}

Deixe um comentário

1 × 1 =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.