Array de Ponteiros

CBeginner
Pratique Agora

Introdução

Na programação C, um array de ponteiros (array of pointers) é um array em que cada elemento é um ponteiro para outro tipo de dado, como int, char, float, etc. Neste laboratório, aprenderemos como acessar um array de ponteiros para inteiros e um array de ponteiros para caracteres.

Array de Ponteiros Inteiros

Nesta etapa, acessaremos um array de ponteiros para inteiros. Abra o arquivo main.c no diretório ~/project/ e cole o seguinte código:

#include <stdio.h>

// Declaração global.
const int MAX = 5;

int main() {
  printf("\n\n\t\t==== Array of Integer Pointers ====\n\n\n");

  int var[] = {10, 20, 30, 40, 50}; // inicializando um array (aqui var) de ponteiros int
  int i = 0;

  /*
      ptr é um array de ponteiros int, ou seja,
      armazena o endereço de cada elemento do array
  */
  int *ptr[MAX];

  for(i = 0; i < MAX; i++) {
    /*
        Atribui o endereço de cada elemento do array
        ao array ptr
    */
    ptr[i] = &var[i];
  }

  for(i = 0; i < MAX; i++) {
    /*
        ptr[i] armazena o endereço do elemento var[i].
        Portanto, *ptr[i] retorna o valor do elemento
        armazenado no local ptr[i]
    */
    printf("Value of var[%d] = %i\n\n", i, *ptr[i]);
  }

  printf("\n\n\t\t==== End of Program ====\n\n\n");
  return 0;
}

Este programa inicializa um array de ponteiros para inteiros e atribui o endereço de cada elemento do array ao array de ponteiros. Em seguida, ele imprime o valor de cada elemento usando o array de ponteiros.

Array de Ponteiros de Caracteres

Nesta etapa, acessaremos um array de ponteiros para caracteres. Cole o seguinte código após o código da etapa anterior:

#include <stdio.h>

// Declaração global.
const int MAX = 4;

int main() {
  printf("\n\n\t\t==== Array of Character Pointers ====\n\n\n");

  char *names[] = {"Google", "Amazon", "Facebook", "Apple"}; // inicializando um array (aqui names) de ponteiros char
  int i = 0;

  for(i = 0; i < MAX; i++) {
    printf("Value of names[%d] = %s\n\n", i, names[i]);
  }

  printf("\n\n\t\t==== End of Program ====\n\n\n");
  return 0;
}

Este programa inicializa um array de ponteiros para caracteres e atribui o endereço do primeiro caractere de cada string ao array de ponteiros. Em seguida, ele imprime o nome completo de cada elemento usando o array de ponteiros.

Compilar e Executar o Programa

Nesta etapa, compilaremos e executaremos o programa. Abra o terminal e navegue até o diretório ~/project/. Digite o seguinte comando para compilar o programa:

gcc main.c -o main

Após a compilação bem-sucedida, digite o seguinte comando para executar o programa:

./main

Este comando executará o programa e mostrará a saída no terminal:

  ==== Array of Integer Pointers ====


Value of var[0] = 10

Value of var[1] = 20

Value of var[2] = 30

Value of var[3] = 40

Value of var[4] = 50


  ==== Array of Character Pointers ====


Value of names[0] = Google

Value of names[1] = Amazon

Value of names[2] = Facebook

Value of names[3] = Apple


  ==== End of Program ====

Código Completo

#include <stdio.h>

// Declaração global.

const int MAX = 5;

int main() {
  printf("\n\n\t\t==== Array of Integer Pointers ====\n\n\n");

  int var[] = {10, 20, 30, 40, 50}; // inicializando um array (aqui var) de ponteiros int
  int i = 0;

  /*
      ptr é um array de ponteiros int, ou seja,
      ele armazena o endereço de cada elemento do array
  */
  int *ptr[MAX];

  for(i = 0; i < MAX; i++) {
    /*
        Atribui o endereço de cada elemento do array
        ao array ptr
    */
    ptr[i] = &var[i];
  }

  for(i = 0; i < MAX; i++) {
    /*
        ptr[i] armazena o endereço do elemento var[i].
        Portanto, *ptr[i] retorna o valor do elemento
        armazenado na localização ptr[i]
    */
    printf("Value of var[%d] = %i\n\n", i, *ptr[i]);
  }

  printf("\n\n\t\t==== Array of Character Pointers ====\n\n\n");

  char *names[] = {"Google", "Amazon", "Facebook", "Apple"}; // inicializando um array (aqui names) de ponteiros char
  i = 0;

  for(i = 0; i < MAX; i++) {
    printf("Value of names[%d] = %s\n\n", i, names[i]);
  }

  printf("\n\n\t\t==== End of Program ====\n\n\n");
  return 0;
}

Resumo

Neste laboratório, aprendemos como acessar um array de ponteiros inteiros e um array de ponteiros de caracteres. Um array de ponteiros é um array no qual cada elemento é um ponteiro para outro tipo de dado. Aprendemos como inicializar um array de ponteiros, como atribuir os endereços dos elementos do array a um array de ponteiros e como acessar os elementos do array usando o array de ponteiros.