int *a → significa que a é um ponteiro para inteiro
*a→ operador de referenciamento
&a → sempre que eu quiser descobrir o endereço de alguma variavel
int **p→ fazendo um ponteiro para ponteiro ou fazendo um ponteiro que está apontando para um vetor de duas posições
Array são imutaveis
Ponteiros podem ser declarados como vetores ou matrizes multidimensionais. São declarados como qualquer outro tipo de matriz.
Exemplo:
int *vetor[30]; /* Vetor de 30 ponteiros para números inteiros. */
int a=1,b=2,c=3;
vetor[0] =&a; /* vetor[0] passa apontar para o endereço de a*/
Ao alocar um vetor de apontadores para inteiros não implica que você alocou espaço de memória para armazenar os valores desses inteiros.
Um ponteiro pode apontar para outro ponteiro que sua vez aponta para um valor. Esta situação é chamada de Indireção multipla ou de Ponteiros para Ponteiros.
int x, *p, **q;
x=10;
p=&x; // p aponta para x
q=&p; // q aponta para p ( observe os dois * em q quando definido, ele é um ponteiro de ponteiro de inteiro )