O programa abaixo escreve o valor recebido por extenso.  Eu queria saber Por que eu tive que declarar um Array como *ponteiro.  ps:[eu acertei no fogo ou vontade.]    
#include <stdio.h>
#include <conio.h>
main()
{
  int dezena, unidade, numero;
  const char *a[]={"um", "dois", "tres", "quatro", "cinco", "seis", "sete", "oito",
           "nove", "dez", "onze", "doze", "treze", "catorze", "quinze", "dezesseis",
           "dezesete", "dezoito", "desenove", "vinte", "trinta", "quarenta",
           "cinquenta", "sessenta", "setenta", "oitenta", "noventa", "cem", "e"};
  printf("Digite um numero de 1 a 99: ");
  scanf("%d", &numero);
  dezena = numero / 10;
  unidade = numero % 10;
  if(numero <= 20)
  printf("%2s", a[numero -1]);
  else {
        printf("%2s", a[17 + dezena]);
        if(unidade != 0) printf(" e %2s", a[unidade -1]);
  }
  getch();
}