Curso de C++/Ponteiros
Antes de falar em ponteiros, é importante nos lembrarmos de alguns aspectos referentes à variáveis.Deve-se saber que variáveis possuem nomes que as identificam durante a execução do programa. Você deve saber também que uma variável armazena um valor (que pode ser fixo, no caso de uma constante, ou pode mudar durante a execução de seus códigos). Vetores em C são definidos como ponteiros para áreas consecutivas da memória. Deste modo é possível acessar cada elemento de diversas maneiras:
- include <stdio.h>
int main() {
int arranjo[5] = { 2, 4, 3, 1, 5 }; printf("%p\n", arranjo); /* imprime o endereço do arranjo */ printf("%d\n", arranjo[0]); /* imprime o primeiro elemento do arranjo, 2 */ printf("%d\n", *arranjo); /* imprime o primeiro inteiro do endereço apontado pelo arranjo, que é o primeiro elemento, 2 */ printf("%d\n", arranjo[3]); /* imprime o quarto elemento do arranjo, 1 */ printf("%p\n", arranjo+3); /* imprime o terceiro endereço após o início do arranjo */ printf("%d\n", *(arranjo+3)); /* imprime o valor no tercero endereço após o início do arranjo, 1 */ return 0;
}
O processo descrito acima é chamado aritmética de ponteiros, e é usada em índices de ponteiros. Uma variável possui um endereço, o nome da variável não é nada mais que um apelido para a localização deste endereço. Desta forma, um ponteiro não é nada mais que um tipo especial de variável que armazena o endereço de outra. Veja um exemplo:
- include <stdio.h>
- include <stdlib.h>
int main(int argc, char *argv[]) {
// variável do tipo int int valor = 10;
// ponteiro para uma variável do tipo int int *p = &valor;
// exibe o valor da variável "valor", apontada // pelo ponteiro p printf("%d", *p);
printf("\n\n");
system("PAUSE"); return 0;
}
Neste código nós temos a declaração e definição de duas variáveis:
int valor = 10; int *p = &valor;
A primeira variável é uma variável do tipo int e a segunda é um ponteiro para uma variável do tipo int. Veja que devemos sempre usar "*" antes do nome de um ponteiro em sua declaração. O símbolo "&" serve para indicar que estamos acessando o endereço de uma variável e não o seu conteúdo. O resultado destas duas linhas é que agora temos um ponteiro que nos permite acessar e manipular a variável valor.