Aula 19: Aritmética de ponteiros e vetores
Dá para fazer aritmética com ponteiros — mas uma aritmética inteligente: p + 1 não avança um byte, avança um elemento inteiro, ou seja, sizeof(type) bytes. Aqui se revela o grande segredo dos vetores: o nome de um vetor 'decai' para o endereço do seu primeiro elemento — arr é exatamente &arr[0]. Daí
Um vetor é uma fileira de caixas lado a lado numa rua. O nome do vetor é o endereço da primeira caixa, e p + 1 significa 'pule para a próxima caixa' — não importa quantos centímetros de largura cada caixa tenha, o pulo é sempre exatamente uma caixa inteira.
- aritmética de ponteiros
- Somar e subtrair em ponteiros. p + 1 avança para o próximo elemento, não para o próximo byte.
- passo de elemento
- p + 1 soma sizeof(type) bytes ao endereço — para int (4 bytes): de 1000 para 1004.
- decaimento de vetor
- Na maioria das expressões, o nome de um vetor vira o endereço do seu primeiro elemento: arr == &arr[0].
- a identidade arr[i] == *(arr + i)
- Indexação é um atalho para aritmética: pule i elementos a partir do início e acesse o valor.
- ponteiro andarilho
- Um laço que avança um ponteiro pelo vetor: while (p < arr + n) { ...; p++; }.