Aceito convites para um café! :

Ponteiros em C++

O post Ponteiros em C++ descreve o que é um ponteiro, como o mesmo funciona e seu comportamento na memória do computador. O post também demonstra quais são os operadores existentes na linguagem C++ para se trabalhar com Ponteiros.

Ponteiros em C++

Ponteiro é uma variável que armazena um endereço de memória. O endereço de memória alocado pelo ponteiro representa um local na memória do computador que pode pode ser utilizado para armazenar tipo de dados, como por exemplo: Inteiro, Float, String. No caso da declaração das variáveis convencionais, exemplo: int i, o sistema operacional se encarrega de alocar na memória do computador o espaço necessário para armazenar o tipo de dado declarado e “marcar” aquele espaço da memória com um nome, o qual é representado pelo nome da variável. O papel do ponteiro é armazenar exatamente o endereço alocado pelo sistema.

Como ponteiros guardam endereços de memória, pode-se armazenar qualquer  endereço de memória, mesmo que este endereço não tenha sido reservado no início da execução do programa. Pode-se declarar ponteiros ou usar referenciamento e dereferenciamento. Ponteiros são declarados como se fossem variáveis, mas contendo um indicador (que é um asterisco).

Declaração de Ponteiros

float *ponteiroFloat
int *ponteiroInt

Referência

Referência é quando nos referimos diretamente ao identificador do endereço da memória. A memória é na verdade uma grande tabela com células sequenciais, cada célula tem seu próprio endereço que segue um padrão contínuo. Ou seja, a primeira célula será 0x00000000, a segunda 0x00000001, a terceira 0x00000002, e assim por diante.Quando fazemos referência, estamos obtendo o endereço da célula na memória.

A referência é dada pelo operador &.

O código fonte ilustrar o uso da referência:

#include <iostream>
#include <cstdlib>
using namespace std;
int main (){
int var1 = 100;
int *ptr1;
ptr1 = &var1;
cout << ptr1 << endl;
system (“pause”);
}

Para isso, foi criado uma variável do tipo int denominada var1 e um ponteiro para int denominado ptr1. Foi atribuído o valor 100 para a variável var1 e para a variável ptr1 o endereço de memória de var1 (&var1). Ao exibir o valor contido em ptr1, será exibido o endereço de memória 0x “algum hexadecimal” alocado na mesma.

Dereferência

Dereferência é quando nos referimos ao valor contido no endereço armazenado, ou seja, é o contrário da operação de referência. A dereferência busca o valor que está no endereço gravado no ponteiro, isso quer dizer que o valor obtido não está no ponteiro, mas no endereço que ele aponta.

A dereferência é dada pelo operador *.

Ainda usando o exemplo da variável var1 veja o exemplo de código fonte:

#include <iostream>
#include <cstdlib>
using namespace std;
int main (){
int var1 = 100;
int *ptr1;
ptr1 = &var1;
cout << “O valor contido no endereco de memoria “;
cout << ptr1 <<” e “<< *ptr1 << endl;
system (“pause”);
}

No caso do código fonte descrito anteriormente, o comando cout exibe o valor contido no endereço alocado pela variável ptr1. Observação (Não é exibido o valor armazenado na variável ptr1 e sim o valor armazenado no endereço salvo na variável ptr1). A imagem a seguir ilustra o código fonte de um programa e como as variáveis se comportam na memória principal do computador.

O código fonte possui duas variáveis do tipo inteiro, um vetor do tipo inteiro com duas posições e um ponteiro para inteiro. O ponteiro armazena o endereço da variável b, o qual foi obtido pela operação de referência. Por meio do comando cout é exibido na tela:

  • O endereço da variável a;
  • O valor da variável a;
  • O endereço da variável b;
  • O valor da variável b;
  • O endereço na memória alocado para a posição 1 do vetor;
  • O valor contido na posição 1 do vetor;
  • O endereço na memória alocado para a posição 0 do vetor;
  • O valor contido na posição 0 do vetor;
  • O endereço de memória da variável pt;
  • O valor contido na variável pt;

Alocação de memória

Alem de utilizarmos o endereço de memória de outra variável, é possível alocar um espaço de memória para um ponteiro, isto é muito quando se deseja alocar dinamicamente memória para usar como variáveis do programa. Em C++, a alocação é feita por meio do operador new e a liberação da memória é feita pelo operador delete.

No exemplo a seguir, pode-se observar o uso das funções new e delete:

#include <iostream>
#include <cstdlib>
using namespace std;
int main (){
int *ptr;
ptr = new int; //aloca memória
cout << “Valor contido em ptr” << endl;
cout << ptr << endl;
cout << “Valor armazenado no endereço contido em ptr” << endl;
cout << *ptr << endl;
delete ptr; //libera memória
system (“pause”)
}

 

Fonte:

Site desenvolvido por © Danilo Filitto. Todos os direitos reservados.