Diferença entre ponteiro e referência

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

Ambas são variáveis ​​usadas para se referir a outros objetos indiretamente e compartilham algumas características comuns na superfície. Embora compartilhem muitos recursos comuns, eles também são muito complexos de 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 referências, mas eles geralmente se deparam com problemas cuja solução parece pouco clara.

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



O que é um Pointer?

Cada variável é um local de memória que é definido por 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, a 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 nada mais é que um endereço e uma variável que armazena um ponteiro é chamada de variável de ponteiro.

A ideia é usar identificadores (ou nomes) em vez de endereços numéricos para aliviar a carga de programação, reduzindo assim a complexidade dos programas. Uma vez que esses endereços se referem a localizações 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 antes 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' se refere ao tipo de dados da variável 'x' que na verdade é designado 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 agindo como parâmetros formais de função e uma vez que é definido para se referir a uma variável, não pode ser reposicionado, 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; na verdade, eles podem ser usados ​​como variáveis ​​normais.

int i;

int & ri = i;

Aqui, “ri” é uma referência inteira inicializada com “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 após sua criação.

Diferença entre ponteiro e referência

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

- Ambos fornecem 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 apelido para uma variável já existente. Ele cria um segundo nome para uma variável que pode ser usado 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. Ao contrário de outras variáveis, as variáveis ​​de ponteiro armazenam endereços de memória em vez de valores. Um ponteiro é referenciado usando o operador de indireção * para acessar a localização da memória da variável para a qual ele 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 tem sua própria localização na memória, o que significa que quando você declara um ponteiro, você especifica uma localização que é um endereço de memória atribuído a cada unidade de memória. A variável de ponteiro tem o mesmo endereço onde está salva na memória. Uma variável de referência, por outro lado, é um apelido para outra variável, tomando 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 tem um espaço de endereço válido. O valor NULL pode ser atribuído a uma variável de ponteiro diretamente, o que sugere que ela não aponta 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 do ponteiro vs. referência

Os ponteiros sempre estiveram entre os tópicos favoritos de discussão dos programadores C / C ++ até que as referências surgissem. As referências são um tanto semelhantes aos ponteiros, 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 função, eles têm suas diferenças. Ambos são recursos poderosos em C e C ++ que permitem manipular a memória diretamente, mas com algumas exceções. Um ponteiro contém o endereço de memória de uma variável, enquanto uma referência é apenas um apelido para outra variável.

Publicações Populares

Diferença entre ações e ações

Ações vs. Ações Embora até mesmo falar com um consultor financeiro em Wall Street possa não esclarecer uma grande diferença entre os termos 'ações' e 'ações', há

Diferença entre Hadoop e Spark

Um dos maiores problemas com respeito ao Big Data é que uma quantidade significativa de tempo é gasta na análise de dados que inclui a identificação, limpeza e

Diferença entre centro de gravidade e centróide

As palavras centro e gravidade são derivadas das palavras latinas (ou gregas) 'centrum' e 'gravitatio'. O centro (centróide) representa o centro de massa que é

Diferença entre WAP e roteador

Diferença entre WAP e roteador Algumas pessoas têm dificuldade em escolher se querem um WAP (Ponto de acesso sem fio) ou um roteador para sua casa ou escritório.

Branko Lustig, sobrevivente do Holocausto e famoso produtor da lista de Schindler, morre aos 87

Branko Lustig, famoso produtor de Schindler’s List, Sophie’s Choice e Gladiator morreu aos 87 anos.

Diferença entre ir para e apresentar contínuo

Going To vs Present Contínuo A diferença entre ir para e presente contínuo é que 'going to' é usado para tempos futuros e o presente contínuo é o