Antes de discutir a diferença entre ponteiro e referência, vamos primeiro examinar brevemente o significado desses dois termos. Em um programa, os dados ocupam memória. O local exato da memória na qual os dados foram colocados no momento da execução deve ser conhecido para acessá-los. Variáveis de ponteiro e variáveis de referência são usados para acessar esses dados e manipular os endereços de memória em que estão. Ou seja, ponteiros e referências podem ser usados para se referir a objetos indiretamente. Eles essencialmente mantêm endereços de memória como seus valores. o diferença chave entre um ponteiro e uma referência é que um ponteiro é uma variável que armazena o endereço da localização da memória de outra variável enquanto um referência é uma variável que se refere a outra variável. Os dois mecanismos, a ponteiro e referência, possuem sintaxe e uso diferentes.
Um ponteiro é um objeto de linguagem de programação que armazena o endereço de memória de um valor na memória de computação.
int i = 5;
int * ptr = & i;
A primeira linha define uma variável inicializada com um valor de 5. A segunda linha define um ponteiro para o endereço de memória da variável. Aqui, o 'ptr' é declarado como um objeto do tipo 'ponteiro para int' cujo valor inicial é o endereço do objeto i. Essencialmente, a variável ptr aponta para i armazenando seu endereço de memória.
A obtenção do valor armazenado em um local de memória é chamada desreferenciamento. O operador * é usado para desreferenciar o ponteiro. Após a conclusão das declarações, a expressão indireta * ptr desreferencia ptr para se referir a i.
Para alterar o valor de i, a seguinte atribuição pode ser usada;
* ptr = 20;
Os ponteiros podem ser reatribuídos para se referir a diferentes objetos também.
UMA Ponteiro nulo é um tipo especial de ponteiro. Um ponteiro nulo é frequentemente indicado por 0 ou nulo e aponta para nada. É uma boa prática usar um ponteiro nulo no caso de não ter um endereço exato a ser atribuído ao ponteiro. Essa atribuição pode ser usada em operações e condições lógicas.
Os ponteiros podem ser usado para armazenar e gerenciar os endereços da memória alocada dinamicamente. A implementação e o controle de estruturas de dados, como pilhas, filas e listas, podem ser eficientes com o uso de ponteiros. Por exemplo, uma fila pode ter dois ponteiros; ponteiro de cabeça e ponteiro de cauda. Ponteiros também podem ser usados para passar variáveis por seus endereços, o que permitiria que o valor fosse alterado. A manipulação direta de memória ou dispositivos mapeados na memória também pode ser manipulada usando ponteiros.
Os ponteiros permitem acesso protegido e não protegido à memória endereçada. Portanto, as precauções necessárias devem ser tomadas para verificar se o conteúdo de um ponteiro é válido. Caso contrário, desreferenciar um ponteiro com um endereço de memória inválido pode causar uma falha no programa.
Ponteiros são suportados em linguagens como C, C ++, Pascal e muitas linguagens assembly.
Ponteiro uma apontando para o endereço de memória associado à variável b.
Uma referência é simplesmente um identificador alternativo para um valor armazenado na memória. Permite que um programa acesse indiretamente um dado específico.
int i = 5;
int & ref = Eu;
A primeira linha define uma variável inicializada com um valor de 5. A segunda linha declara 'ref' como um objeto do tipo 'reference to int' que se refere a i. Uma referência é diferente dos dados em si, pois ela é implementada como o endereço físico do dado específico armazenado na memória.
Uma vez definida, uma referência não pode ser reatribuída com um novo valor. Uma referência sempre se refere ao objeto com o qual é inicializado. Na atribuição a seguir, ref ainda se refere a i, mas o valor agora é 20.
ref = 20;
De acordo com o exemplo acima, as referências de referência não requerem operadores.
As referências podem ser usadas quando uma variável sempre se refere a um objeto. Isso ocorre porque, diferentemente dos ponteiros, as referências não podem ser nulas e sempre devem ser atribuídas na inicialização. Como as referências sempre devem se referir a algum objeto, tornar essa variável uma referência garante que o programa funcione de forma eficiente e correta. Como não há referências nulas, a validade de uma variável de referência não precisa ser testada.
Variáveis de referência podem ser usado para transmitir com eficiência grandes dados como argumentos para procedimentos. As referências também são usadas no compartilhamento de grandes dados entre diferentes áreas de código, pois cada código mantém uma referência aos dados.
Linguagens de programação como C ++, Java, Python, Perl, PHP, Ruby, etc..
Ponteiro: Um ponteiro é o endereço de memória de um objeto armazenado na memória de computação.
Referência: Uma referência é um identificador alternativo ou um alias para um objeto.
Ponteiro: Um ponteiro é declarado com o operador *.
Referência: Uma referência é declarada com o operador &.
Ponteiro: Uma variável de ponteiro requer que o operador * seja desreferenciado.
Referência: Uma variável de referência requer que nenhum operador seja desreferenciado.
Ponteiro: Os ponteiros podem ser inicializados como nulos. Tais variáveis são chamadas de ponteiros nulos.
Referência: As referências não podem ser inicializadas como nulas. Não existe uma referência nula. Uma referência deve sempre se referir a um objeto.
Ponteiro: Uma variável de ponteiro pode ser reatribuída para se referir a diferentes objetos.
Referência: Uma variável de referência não pode ser reatribuída. Sempre se refere ao objeto com o qual foi inicializado.
Ponteiro: Variáveis de ponteiro devem ser usadas quando a possibilidade de se referir a nada existe ou quando é necessário fazer referência a coisas diferentes em momentos diferentes.
Referência: Variáveis de referência devem ser usadas quando sempre haverá um objeto para se referir e quando não é necessário usar essa variável de referência para se referir a qualquer outra coisa que não seja esse objeto.
Ponteiro: Variáveis de ponteiro podem ser usadas para implementar algoritmos e estruturas de dados.
Referência: Variáveis de referência podem ser usadas em parâmetros de função, e os tipos de retorno definem interfaces úteis.
Ponteiro: Linguagens de programação como C, C ++, Pascal e muitas linguagens de montagem suportam ponteiros.
Referência: Linguagens de programação como C ++, Java, Python, Perl, PHP, Ruby, etc..
Cortesia da imagem: “Ponteiros” de Este arquivo foi criado por Usuário: SvenTranslation.Own work.Esta imagem vetorial foi criada com o Inkscape. (CC BY-SA 3.0) via Commons -