Beruflich Dokumente
Kultur Dokumente
Ponteiros
1. Aritmética de Ponteiros
Quando utilizamos ponteiros com arrays temos de falar em aritmética de ponteiros. Tem
a ver com o facto de podermos efectuar algumas operações aritméticas com os ponteiros (e com
os endereços por eles contidos).
Em C++ existem quatro operadores aitméticos que podem ser usados com ponteiros:
• operador de adição: +;
• operador de subtracção: -;
• operador de decrement: - -.
Sendo p um ponteiro, consideremos *(p+1) que significa que ao endereço contido por p é
adicionada uma unidade de endereço.
Isto quer dizer que *(p+1) aponta para o endereço seguinte ao endereço apontado por p,
tendo em conta o tipo de dados que está a ser apontado: int, float, char, etc.
Nota: os diferentes tipos de dados podem ocupar diferentes quntidades de memória em bytes,
por exemplo: em p+1 o +1 pode reperesentar: 1 byte; 2 bytes; 4 bytes, etc., consoante o tipo de
dados.
1
1.1. Consideremos o seguinte programa
Neste caso,
2
• A expressão ++p faz o incremento do endereço do ponteiro p. Donde a instrução
cout«++p escreve o endereço seguinte ao de p.
• Com a instrução: cout « p++; em primeiro lugar é esrito o endereço corrente do ponteiro
p e só depois é que é feito o seu incremento.
Acabamos de ver como funciona a aritmética de ponteiros no que diz respeito aos endereços
que eles contêm ou para que apontam.
Vejamos agora como funciona a aritmética de ponteiros com o operador de indirecção (*),
ou seja quanto às variáveis apontadas.
3
• A instrução: cout « *p; faz screver 10, isto porque *p indica indirectamente o valor
contido no primeiro elemento de x.
• A instrução: cout « *(p+1); faz screver 11, isto porque *(p+1) aponta o valor contido
no segundo elemento do array x; no entanto, *p continua com o endereço anterior.
• A instrução: cout « *p++); faz screver 10, que é o valor apontado no momento por p
(que continua a ser o do primeiro elemento do array x); no entanto, com p++, p passa a
apontar para o segundo elemento de x.
2. Ponteiros e Strings
Como já vimos anteriomente (quado falamos de Strings como arrays de char), podemos definir
uma string s) da seguinte forma:
char s[ ] = "Hello";
char *s = "Hello";
4
Consideremos os dois programas que se seguem, em que exemplifica o que se acabou de dizer:
Em qualquer dos casos utilizamos a função cout para escrever a string s por inteiro.
Referências
[1] Azul, Artur Augusto, "Bases de Programação 12", Curso Tecnológico de Informática - 12o ano, Porto
Editora, Porto, 2006.