Recomendado, 2024

Escolha Do Editor

Diferença entre ponteiro e referência

O “ponteiro” e a “referência” são usados ​​para apontar ou referenciar uma outra variável. Mas, a diferença básica entre ambos é que uma variável de ponteiro aponta para uma variável cuja localização de memória é armazenada nela. A variável de referência é um alias para uma variável que é atribuída a ela. O gráfico de comparação abaixo explora as outras diferenças entre um ponteiro e uma referência.

Gráfico de comparação

Base para ComparaçãoPonteiroReferência
BasicO ponteiro é o endereço de memória de uma variável.A referência é um alias para uma variável.
RetornaA variável ponteiro retorna o valor localizado no endereço armazenado na variável ponteiro que é precedido pelo sinal de ponteiro '*'.A variável de referência retorna o endereço da variável precedida pelo sinal de referência '&'.
Operadores*, ->E
Referência nulaA variável do ponteiro pode se referir a NULL.A variável de referência nunca pode se referir a NULL.
InicializaçãoUm ponteiro não inicializado pode ser criado.Uma referência não inicializada nunca pode ser criada.
Hora da inicializaçãoA variável ponteiro pode ser inicializada a qualquer momento no programa.A variável de referência só pode ser inicializada no momento de sua criação.
ReinicializaçãoA variável do ponteiro pode ser reinicializada quantas vezes forem necessárias.A variável de referência nunca pode ser reinicializada novamente no programa.

Definição de Ponteiro

Um “ponteiro” é uma variável que mantém a localização da memória de outra variável. Os operadores usados ​​pela variável de ponteiro são * e ->. A declaração da variável ponteiro contém o tipo de dados base seguido pelo sinal '*' e pelo nome da variável.

 tipo * var_name; 

Vamos entender o ponteiro com a ajuda de um exemplo.

 int a = 4; int * ptr = & a; cout 

Aqui, temos uma variável inteira a e, uma variável ponteiro ptr que armazena o endereço da variável a.

Aritmética de ponteiro

A variável ponteiro pode ser operada com dois operadores aritméticos que são “adição” e “subtração”. A adição referida como “incremento” e a subtração é referida como “decremento”. Quando uma variável ponteiro é incrementada, ela aponta para a localização da memória da próxima variável do seu tipo base. Quando uma variável ponteiro é diminuída, ela aponta para o local da memória da variável anterior de seu tipo base. Portanto, um array pode ser acessado com eficiência por uma variável de ponteiro.

Múltipla Indirecionamento

Um ponteiro aponta para a outra variável de ponteiro que está apontando para o valor alvo. Esse tipo de ponteiro é sempre inicializado com o endereço de outra variável de ponteiro. A declaração de um ponteiro para um ponteiro é a seguinte.

 tipo ** var_name; 

Vamos estudá-lo com um exemplo.

 int a = 4; int * ptr1 = & a; int ** ptr2 = & ptr1; cout 

Ponteiro de função

Como sabemos que uma função não é uma variável, ainda assim ela tem um local de memória, que pode ser atribuído a uma variável de ponteiro. Quando um ponteiro aponta para uma função, a função pode ser chamada com esse ponteiro de função.

Os pontos importantes para lembrar sobre o ponteiro.

  • A variável de ponteiro pode ser criada sem sua inicialização e pode ser inicializada em qualquer lugar do programa.
  • A variável do ponteiro pode ser reinicializada para uma outra variável.
  • A variável do ponteiro pode se referir a NULL.

Definição de referência

A variável de referência é usada para se referir à variável que é atribuída a essa variável de referência. O operador usado pela variável de referência é '&'. A declaração de uma variável de referência contém o tipo de base seguido pelo sinal '&' e depois pelo nome da variável.

 type & refer_var_name = nome_var_; 

Aqui, o tipo é o tipo de dados, o operador & confirma que é uma variável de referência. O refer_var_name é o nome da variável de referência. O var_name é o nome da variável, a qual queremos que a variável de referência se refira.

Vamos entender a variável de referência com a ajuda de um exemplo.

 int a = 4; int & b = a; // b refere-se a ab = 6; // agora a = 6 

Aqui, a variável do tipo int recebe um valor 4. A variável de referência é atribuída à variável a, ou seja, b é um alias de a. Agora, quando atribuímos outro valor a b, modificamos o valor de a. Portanto, pode-se dizer que as mudanças feitas em uma variável de referência também ocorrerão na variável referida por essa variável de referência.

O ponto mais importante é que a variável de referência deve ser inicializada no momento de sua criação. Uma vez que a variável de referência é inicializada com uma variável, ela não pode ser reinicializada para se referir a outra variável. No momento em que você atribui um valor a uma variável de referência, você atribui esse valor a uma variável para a qual uma variável de referência aponta. A variável de referência nunca pode se referir a NULL. A aritmética não pode ser executada em uma variável de referência.

A variável de referência pode ser usada de três maneiras:

  • Como um valor de retorno de função.
  • Como um parâmetro de função.
  • Como uma referência independente.

Principais diferenças entre ponteiro e referência

  1. Referência é como criar um outro nome para referenciar uma variável para que possa ser referenciada com nomes diferentes. Por outro lado, um ponteiro é simplesmente um endereço de memória de uma variável.
  2. Uma variável de ponteiro, se precedida por '*', retorna o valor de uma variável cujo endereço é armazenado no ponteiro variável. Uma variável de referência, quando precedida por '&', retorna o endereço dessa variável.
  3. Os operadores de ponteiro são * e -> enquanto que o operador de referência é &.
  4. Uma variável de ponteiro, se não tiver o endereço de qualquer variável, aponta para nulo. Por outro lado, uma variável de referência nunca pode se referir a Nulo.
  5. Você sempre pode criar uma variável de ponteiro unitializada, mas criamos uma referência quando precisamos de um alias de alguma variável para que você nunca possa criar uma referência de unitialização.
  6. Você pode reinicializar um ponteiro, mas depois de inicializar você não poderá reinicializá-lo novamente.
  7. Você pode criar um ponteiro vazio e inicializá-lo a qualquer momento, mas terá que inicializar a referência somente quando criar uma referência.

Nota:

Java não suporta ponteiros.

Conclusão

O ponteiro e a referência são usados ​​para apontar ou referenciar outra variável. Mas ambos diferem em seu uso e implementação.

Top