Diferença entre ponteiro e referência

Ponteiros e referências são os recursos mais poderosos em C e C ++, que permitem aos programadores manipular diretamente o endereço da memória para um gerenciamento eficiente da memória.

Ambas são variáveis ​​usadas para se referir a outros objetos indiretamente e compartilham alguns recursos comuns na superfície. Embora eles compartilhem muitas capacidades comuns, eles também são muito complexos para entender.

Um ponteiro é uma variável que contém o endereço de memória de outra variável, enquanto uma referência é como um ponteiro que pode ser usado para se referir indiretamente a outra variável.

A maioria dos programadores parece desenvolver algum entendimento sobre quando usar ponteiros e quando usar referências, mas geralmente se deparam com problemas cuja solução parece incerta..

Então, para entender melhor a filosofia, vamos entender a diferença entre os dois.

O que é um ponteiro?

Toda variável é um local de memória definido pelo seu endereço e emparelhado com um identificador que contém algum valor que pode ser alterado durante o curso de um programa. Em termos simples, variável é um símbolo que representa uma quantidade.

Um ponteiro é uma variável que contém o endereço de memória de outra variável. Um ponteiro não é senão um endereço e uma variável que armazena um ponteiro é chamada de variável de ponteiro.

A idéia é usar identificadores (ou nomes) em vez de endereços numéricos para aliviar o fardo da programação, reduzindo assim a complexidade dos programas. Como esses endereços se referem a locais reais na memória do computador, ponteiros podem ser usados ​​para acessar e manipular o conteúdo armazenado na memória.

Como qualquer variável ou constante, os ponteiros devem ser declarados para seus tipos. Como os ponteiros contêm endereços de memória que pertencem a um tipo de dados separado, eles devem ser declarados usando ponteiros para que você possa trabalhar com eles. A forma geral de uma declaração de ponteiro é:

Data_type * var-name;

Aqui, “Data_type” é o tipo base do ponteiro e “var-name” é a variável do ponteiro. O asterisco (*) aqui é usado para declarar o ponteiro que designa a variável "var-name" como uma variável de ponteiro.

int * p; // ponteiro inteiro

float * x; // ponteiro flutuante

Aqui, a variável "p" aponta para um tipo de dados inteiro que é declarado como "int", que se refere ao tipo de dados da variável. Da mesma forma, no segundo exemplo, "float" refere-se ao tipo de dados da variável "x" que de fato é designada como um ponteiro para uma variável de ponto flutuante.

O que é uma referência?

Uma referência é como um ponteiro com acesso indireto a uma variável. É como um alias para outra variável, o que significa que é apenas outro nome para uma variável já existente.

Ele permite que os programadores criem um segundo nome para a variável que eles podem usar para manipular o conteúdo armazenado nessa variável. É uma entidade que é um alias para outra variável e tem o mesmo endereço da variável original. Ele suporta passagem por referência, atuando como parâmetros formais de função e, uma vez definido para se referir a uma variável, não pode ser redimensionado, o que significa que não pode ser referido a outra variável.

Ao contrário dos ponteiros, eles não precisam do operador de desreferenciamento para acessar o valor; de fato, eles podem ser usados ​​como variáveis ​​normais.

int i;

int & ri = i;

Aqui, "ri" é uma referência inteira inicializada para "i". Ele declara "ri" como um objeto do tipo "referência a int". Uma referência pode ser facilmente confundida com um ponteiro que é uma variável independente, cujos valores de endereço não podem ser reatribuídos depois de criados.

Diferença entre ponteiro e referência

  1. Noções básicas de ponteiro e referência

- Ambos oferecem recursos quase semelhantes em termos de usabilidade e a distinção pode ser complicada. Um ponteiro é apenas uma variável que armazena o endereço de memória de outra variável, enquanto uma referência é como um alias para uma variável já existente. Ele cria um segundo nome para uma variável que pode ser usada para modificar o conteúdo armazenado nessa variável.

  1. Declaração de Ponteiro e Referência

- Um ponteiro é como qualquer outra variável que armazena um dado. Diferentemente de outras variáveis, as variáveis ​​de ponteiro armazenam endereços de memória em vez de valores. Um ponteiro é desreferenciado usando o operador indireto * para acessar o local da memória da variável para a qual aponta. Uma referência, por outro lado, não precisa de nenhum operador de desreferenciamento para acessar o valor.

  1. Reatribuição de ponteiro e referência

- Ao contrário dos ponteiros que podem ser inicializados a qualquer momento, as referências devem ser atribuídas na inicialização. Os ponteiros podem ser acessados ​​diretamente, enquanto as referências não podem ser acessadas diretamente.

  1. Endereço de memória para ponteiro e referência

- Uma variável de ponteiro possui seu próprio local na memória, o que significa que quando você declara um ponteiro, especifica um local que é um endereço de memória atribuído a cada unidade de memória. A variável ponteiro tem o mesmo endereço em que é salva na memória. Uma variável de referência, por outro lado, é um alias para outra variável, assumindo assim o endereço da variável de referência.

  1. Valor NULL para ponteiro e referência

- NULL representa o final da lista, o que significa que indica que o valor é desconhecido e especifica que a variável não possui um espaço de endereço válido. O valor NULL pode ser atribuído diretamente a uma variável de ponteiro, o que sugere que não aponte para lugar nenhum, enquanto NULL não pode ser atribuído a uma variável de referência.

Ponteiro vs. Referência: Gráfico de Comparação

Resumo de Ponteiro vs. Referência

Os ponteiros sempre estiveram entre os tópicos favoritos da discussão dos programadores de C / C ++ até as referências aparecerem. As referências são um pouco semelhantes aos indicadores, mas têm seu quinhão de prós e contras em comparação. Embora ambos possam ser usados ​​para alterar variáveis ​​locais de uma função dentro de outra, eles têm suas diferenças. Ambos são recursos poderosos em C e C ++ que permitem manipular diretamente a memória, mas com algumas exceções. Um ponteiro mantém o endereço de memória de uma variável, enquanto uma referência é apenas um alias para outra variável.