Diferença entre referência C ++ vs ponteiro

Embora a referência do C ++ ao ponteiro pareça ser semelhante, há uma diferença significativa entre a Referência do C ++ e o Ponteiro. Uma variável de referência pode ser dita como outro nome para uma variável existente. Depois que essa variável é inicializada, o nome da variável pode ser usado para se referir a outra variável. Ponteiros, por outro lado, são variáveis ​​que armazenam o endereço de uma variável. Como qualquer variável, elas são declaradas primeiro e, em seguida, o endereço de qualquer variável pode ser armazenado nelas. Vamos dar uma olhada nas diferenças entre Referência C ++ e Ponteiro em detalhes, como abaixo.

Comparação cara a cara entre referência C ++ e ponteiro (infográficos)

Abaixo está a diferença top 7 entre C ++ Reference vs Pointer

Principais diferenças entre Referência C ++ e Ponteiro

O C ++ Reference vs Pointer são escolhas populares no mercado; vamos discutir algumas das principais diferenças entre referência C ++ e ponteiro:

A principal diferença entre C ++ Reference vs Pointer é que um está se referindo a outra variável enquanto o último está armazenando o endereço de uma variável. As referências não fazem uma alteração em uma variável original, se o ponteiro for alterado, ele afeta a variável original. Uma referência deve ser inicializada na declaração enquanto não for necessário inicializar um ponteiro depois que ele for declarado. Uma matriz de ponteiros pode ser criada enquanto uma matriz de referências não pode ser criada. Um valor nulo não pode ser atribuído a uma referência, mas pode ser atribuído a um ponteiro.

Referência C ++ vs tabela de comparação de ponteiro

A comparação principal entre referência de C ++ e ponteiro é discutida abaixo:

A base de comparação entre Referência C ++ vs PonteiroReferência C ++Ponteiro
VariáveisUma referência pode ser dita como um alias para uma variável existente. O principal uso dessa variável está funcionando como um parâmetro que funciona como uma passagem por referência. Isso é passado para uma função. A função para a qual isso é passado funciona na variável original em vez da cópia em uma passagem por valor. As alterações feitas dentro da função também serão refletidas fora.Variáveis ​​de ponteiro são variáveis ​​que armazenam endereço. Diferentemente das variáveis ​​usuais que temos como int, double e char, ele armazena endereços de memória. Para facilitar a programação, surge a necessidade dessa variável. É uma variável que pode armazenar um valor de um tipo específico.
DeclaraçãoA declaração de uma variável de referência C ++ é feita adicionando um símbolo '&' antes de uma variável. Quando é usado com uma expressão, indica que está funcionando como um endereço do operador. É usado para fornecer outro nome para uma variável existente.
Sintaxe:
digite & newName = existingName ;
// ou
digite & newName = existingName ;
// ou
digite & newName = existingName ;
Por exemplo:
/ * Declaração de referência de teste e inicialização * /
#incluir
usando espaço para nome std;
int main () (
nome da string = "Priya"; // Declara uma variável de string chamada name
string & refName = nome; // Declara uma referência (alias) ao nome da variável
// Ambos refName e name referem-se ao mesmo valor de "Priya"
cout << nome << endl; // Imprime o valor da variável “Priya”
cout << refName << endl; // Imprime o valor da referência “Priya”
Agora mude o valor de Name
refName = "Karishma"; // Atribua novamente um novo valor a refName
cout << refName << endl;
cout << nome << endl; // O valor do número também muda "Karishma"
nome = "Snehal"; // Atribua novamente um novo valor ao nome
cout << nomeador << endl;
cout << refName << endl; // O valor de refName também muda "Snehal"
)
Isso significa que os valores de uma variável de referência podem ser alterados no original e na cópia da variável.
Antes de usar um ponteiro em qualquer lugar do programa, ele deve ser declarado com antecedência. Para declarar um ponteiro e informar ao sistema que é um ponteiro, uma variável é prefixada por um '*'. Um ponteiro é acompanhado por um tipo de dados que pode ser um int ou um duplo, etc.
Sintaxe:
tipo * pntr ; // Declara uma variável de ponteiro chamada pntr como um ponteiro do tipo
// ou
tipo * pntr ;
// ou
tipo * pntr ;
Por exemplo:
int * newPtr; // Declara uma variável de ponteiro chamada newPtr apontando para um int (um ponteiro int)
Este ponteiro conterá o endereço. Esse endereço possui um valor int.
double * newdPtr; // Declarar um ponteiro duplo
O * indica que um ponteiro está sendo declarado e não atua como um operador.
ReatribuiçãoUma variável de referência não pode ser reatribuída.
Exemplo:
int x = 5;
int y = 6;
int & r = x;
Um ponteiro pode ser reatribuído e essa propriedade é útil quando um desenvolvedor está implementando estruturas de dados como listas vinculadas, árvores, etc.
Exemplo:
int x = 5;
int y = 6;
int * p;
p = & x;
p = & y;
Endereço de memóriaUma variável de referência compartilha o mesmo endereço que a variável original. Essas referências podem ser passadas para diferentes funções, podem ser armazenadas em diferentes classes, etc. Uma referência nunca aponta para uma nova variável até que a antiga seja excluída ou saia do escopo.Um ponteiro tem seu próprio endereço de memória e o armazena na pilha. Um ponteiro é uma variável independente e pode ter novos valores atribuídos a si mesmo.
Valor nuloUma referência não pode ter um valor nulo atribuído.Um ponteiro pode ter um valor nulo atribuído diretamente.
ArgumentosUma variável de referência pode ser referenciada como desvio por valor. Aqui os argumentos são transmitidos por valor para as funções. Um clone é criado e enviado para a função que o utiliza. As alterações feitas na cópia não têm efeito na variável original.Quando desejamos alterar a cópia original, isso pode ser feito passando um ponteiro do objeto para a função. Isso é conhecido como passagem por referência.
Quando usarAs referências estão acessando indiretamente uma variável. Considere o seguinte exemplo:
dia enum
(
Domingo segunda-feira, …
);
Se definirmos uma variável
dia x;
E queremos sobrecarregar um operador para a declaração, então podemos escrever como abaixo:
dia e operador ++ (dia e d)
(
d = (dia) (d + 1);
retorno d;
)
Em resumo, isso pode ser usado em parâmetros de função e tipos de referência.
O uso de ponteiros é sem pré-declaração.
dia * operador ++ (dia * d);
Isso pode ser usado para implementar estruturas de dados e operações aritméticas de ponteiros.

Conclusão - Referência C ++ vs Ponteiro

O C ++ Reference vs Pointer é difícil de trabalhar, mas eles aumentam a eficiência do programa em grande parte. Ambos C ++ Reference vs Pointer têm seus próprios usos e servem a seus próprios propósitos. Você pode usar ponteiros quando desejar implementar estruturas e algoritmos de dados, enquanto referências quando desejar usar funções e parâmetros com tipos de retorno.

Artigo recomendado

Este foi um guia para as principais diferenças entre C ++ Reference e Pointer. Aqui também discutimos as diferenças de chave Referência C ++ vs Ponteiro com infográficos e tabela de comparação. Você também pode consultar os seguintes artigos para saber mais -

  1. Diferenças entre Python e C ++
  2. Desempenho C vs C ++ - Melhores diferenças
  3. MongoDB vs Cassandra
  4. Mobx vs Redux
  5. Vetor C ++ vs matriz: principais diferenças
  6. MongoDB vs DynamoDB: Funções
  7. MongoDB vs SQL: Quais são as funções
  8. C vs C #: Funções