Ponteiros são variáveis que guardam o endereço de memória de outra variável. Veremos agora, como se aplica este recurso em vetores.
Recapitulando o que são vetores: variáveis de endereço continuo na memória. Ou seja, enquanto uma variável do tipo int
ocupa, por exemplo, um bloco de memória, um vetor de 5 posições do tipo int
ocupa 5 blocos de memória.
Para acessarmos cada item de um vetor usamos os índices que ficam entre colchetes ([]).
Há duas formas de trabalhar com ponteiros para vetor.
1. Usar índices no ponteiro como se ele fosse um vetor:
ponteiro = vetor;
ponteiro[indice1] = qualquer valor para ser gravado nesse índice;
ponteiro[indiceN] = qualquer valor para ser gravado nesse índice;
Preste atenção no seguinte detalhe. Apesar de ser ponteiro, ao atribuirmos um valor ao índice não usamos o sinal de dereferência (*).
2. Usar o que chamamos de aritmética de ponteiros.
Aritmética de ponteiros consiste em modificar o valor do ponteiro para ele indicar o próximo endereço de memória do vetor.
Exemplificando, seria algo como:
ponteiro = endereço do índice 0 do vetor;
*(ponteiro+indice1) = qualquer valor para ser gravado nesse índice;
*(ponteiro+indiceN) = qualquer valor para ser gravado nesse índice;
Quando somamos um número ao ponteiro, o que estamos fazendo é, na verdade, somar o número necessário de bytes para o próximo endereço.
Ex.: Se tivermos um ponteiro para um vetor de inteiro, quando formos calcular o terceiro espaço faremos *(ponteiro+3). Internamente será calculado o seguinte -> ponteiro + 3 × o tamanho de int (4 bytes). Então, 3 × 4 = 12 bytes.
ponteiro = 0x00001100;
ponteiro + 12 bytes;
novo ponteiro = 0x00001100C;
Apesar de ser uma conta simples, não precisamos nos preocupar com isso. Porque o próprio sistema cuida de executar este cálculo.