/**************************************************************************
 * Programa ponteiros.c                                                   *
 *                                                                        *
 * Utilização de ponteiro duplo para manipular um array de strings.       *
 * Data: 18 de setembro de 2000                                           *
 * Autor: CuCo (Rodrigo Hausen)                                           *
 **************************************************************************/

#include <stdio.h>

main () {
  int i;
  
  // definindo os nomes
  char *nome1="Astrogildo";
  char *nome2="Laurêncio";
  char *nome3="Antuérpio";
  char *nome4="Credomildo";

  // definindo o ponteiro para as strings
  char **array_de_strings;

  // alocando espaço para 4 nomes
  array_de_strings=(char **)malloc(4*sizeof(char *));

  // fazendo cada elemento do vetor apontar para uma string
  array_de_strings[0]=nome1;
  array_de_strings[1]=nome2;
  array_de_strings[2]=nome3;
  array_de_strings[3]=nome4;

  // imprimindo o endereço da primeira string na memória
  // NOTA: o endereço será impresso em base 16 (hexadecimal)
  //       o número será impresso seguido de um 0x
  printf("A primeira string está armazenada no endereço de memória:\n%p\n\n",*array_de_strings);

  // acessando a primeira string
  printf ("O primeiro nome é:\n%s\n\n",array_de_strings[0]);

  // acessando o primeiro elemento da segunda string
  printf ("O primeiro elemento da segunda string é:\n%c\n\n",*array_de_strings[1]);

  // imprimindo todas as strings
  printf ("As strings são:\n");
  for (i=0;i<4;i++) {
    printf ("%s\n",array_de_strings[i]);
  }
}

