paulo1205
(usa Ubuntu)
Enviado em 24/06/2013 - 16:01h
Não têm a mesma funcionalidade, não.
Um ponteiro é uma variável que armazena um endereço de memória. Esse endereço pode ser usado para
apontar (por isso o nome ponteiro) para um objeto, se o endereço que essa variável armazena for o endereço onde está armazenado um objeto válido.
Ter uma variável de tipo ponteiro no programa não implica que vai haver um objeto válido para o qual qessa variável vai apontar. Aliás, ter ponteiros que apontem para endereços não-válidos é útil em muitos casos, principalmente quando esse endereço é nulo (
NULL em C,
NULL ou
0 em C++ até a versão 2003, e
nullptr no C++ 2011), que geralmente indica que ainda não existe ou que não foi possível criar um objeto válido para ser passado ou devolvido pela função.
Esses "ainda não existe" e "não foi possível criar" referem-se a situações que podem acontecer durante a execução do programa, sem depender exclusivamente da vontade ou da análise do programador.
Um outro caso em que se usam ponteiros é para permitir que objetos possam ser manipulados em partes do programa distintas daquelas onde eles foram declarados, sem ter de ficar copiando valores de um lado para o outro. Isto é: em lugar de passar o valor do objeto para a função e receber um outro valor de volta, que poderia sobrescrever o valor original do objeto, passa-se apenas o endereço do objeto, e a função pode usar esse endereço para chegar ao objeto original, para lê-lo ou modificá-lo, conforme a necessidade. Passar endereços é vantajoso principalmente quando os objetos manipulados são muito grandes ou complexos, tornando operações de cópia mais dispendiosas do que a manipulação indireta (i.e. através do ponteiro) dos dados.
Em C++, a necessidade de usar ponteiros para este último caso é menor do que a do C, já que C++ possui "referências". Por trás das cortinas, referências funcionam de modo parecido com ponteiros, mas o usuário não tem de manipular endereços explicitamente, e tem garantia de que o objeto referido será sempre válido. Mas ainda há bastante espaço em C++ para ponteiros, principalmente para lidar com os tais objetos que possam estar numa situação de "ainda não existe" ou de "não foi possível criar".