Introdução

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

Matrizes de Ponteiros

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.

Ponteiro para Ponteiro e indireção múltipla

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 )