Conceitos de Programação: Ponteiros

Olá Pessoal…

Hoje irei falar de um conceito que muitos iniciantes em programação tem dúvidas, que é o conceito de Ponteiros (muito utilizado em linguagem c / c++).


Em várias linguagens de programação, existem vários tipos de variáveis, as mais comuns são numéricas (int, double, float, etc), texto (char, string, etc) e lógicas (boolean – true {verdadeiro}, false {falso}), dentre outros tipos (como Data, void, etc), porém há um tipo único de variável, uma variável que utiliza apontamentos na memória RAM, para otimização do programa, essa variável, é um ponteiro.

Mas como funciona? Simples, eu tenho uma variável, numérica por exemplo (int), com o valor 8, automaticamente quando eu crio essa variável, ela é alocada na memória RAM, que automaticamente ‘dá’ um endereço para essa variável, por exemplo, em 1 GB de RAM, pode haver milhares de endereços de variáveis, então, essa variável que criamos tem o endereço 1248. Quando eu crio um ponteiro, basta eu apontar para essa variável, que eu consigo manipular essas informações.

Exemplo de Ponteiro

Exemplo de Ponteiro

Portanto, para se usar um Ponteiro, basta declarar uma variável com um * antes do nome, quer dizer que essa variável irá fazer referência a endereços de memória, após isso, para pegar o endereço de memória de uma variável através de uma variável ponteiro, basta usar o &, agora se for pegar o valor real da variável, deve-se usar o *. No exemplo acima, vemos a criação da variável nValor valendo 10, e da variável nPonteiro, apontando para o nValor, basicamente ele só faz o direcionamento para esse dado.

Mas muitos se perguntam, com o desempenho dos micros atuais, qual o objetivo de Ponteiros?
Simplesmente otimizar o programa e melhorar a segurança e qualidade nos dados, por exemplo, vamos supor que você está montando um sistema complexo de compras, no qual o usuário faz o cadastro de informações como e-Mail, então quando ele faz login, quando ele deseja comprar algo, quando ele quer mudar algo no sistema, sempre serão criadas variáveis para armazenar o e-Mail dele? Errado, nem mesmo variáveis globais (públicas), o ideal é criar um ponteiro que irá ficar na memória RAM, apenas para fazer o direcionamento, dessa forma, a variável só será criada uma vez, e o ponteiro que fará o controle de acesso a essa informação.
Ou seja, somente na primeira vez que o login for efetuado com sucesso, será armazenado as variáveis, depois disso, qualquer página ou módulo que o usuário acessar, é mais viável usar um ponteiro para manipular os valores.
Esse conceito é muito usado em Sistemas operacionais, por exemplo, não sei se já perceberam, mas se você selecionar uma parte do texto no Bloco de Notas e dar Ctrl+C (Copiar), você pode colar em qualquer programa que use edição de texto (como no Word), mas ao fechar o bloco de notas, esse mesmo texto copiado fica registrado na memória RAM, e quando você pressiona o Ctrl+V (Colar), o ponteiro apenas aponta para o local que esta armazenado a cópia.

Abaixo um exemplo de uso de ponteiro na Linguagem C:

//Bibliotecas
#include <stdio.h>
//#include <gconio.h> //linux, leia https://terminaldeinformacao.com/2012/08/25/programacao-gcc-gconio-h/
//#include <conio.h> //windows
 
//Funções complementares
void mostraPoInt(int *pInt);
 
//Função Principal
main(){
  //Declarando Variáveis
  int nVal1, *pVal1;
  nVal1=10;
  //Fazendo o apontamento
  pVal1=&nVal1;
  //Mostrando dados do Ponteiro
  mostraPoInt(pVal1);
  getch();
}
 
void mostraPoInt(int *pInt){
  printf("\n--Dados do Ponteiro--");
  printf("\nEndereço: %d", &pInt);
  printf("\nValor: %d",*pInt);
  printf("\nTamanho (bytes): %d\n\n",sizeof(*pInt));
}

Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

4 Responses

  1. Vinicius Torres disse:

    parabéns pelo post !!

  2. marcio disse:

    Alguém pode me ajudar?

    Tenho que fazer uma estrutura de computador com os atributos marca, modelo e memoria, e criar um método que receba um computador como parâmetro e permita ao usuario cadastrar seus atributos, e no final imprima as informaçoes na tela.

    helppppppppppppppppppp!!!

    • Dan_Atilio disse:

      Boa noite Marcio.
      Você poderia fazer uma matriz ou uma estrutura com os atributos de marca, modelo e memoria, cada um sendo String e tendo um tamanho, nisso na sua função principal, teria um menu, do tipo, incluir computador ou listar computador, se o cara escolher no menu a opção incluir, você pede para ele informar as parametrizações, ai poderia utilizar gets para capturar a string ao invés de scanf por exemplo.
      Eu fiz um exemplo uma vez, de cadastro de alunos, utilizando lista encadeada, você poderia aproveitar algo, segue abaixo o link:
      https://terminaldeinformacao.com/2013/05/19/lista-encadeada-em-linguagem-c/
      Abraços.

Deixe uma resposta

Terminal de Informação