Em graduações da área de tecnologia, existem conceitos e matérias que geralmente assustam os alunos, alguns dos principais exemplos são matérias relacionadas a Programação Orientada a Objetos e Cálculo, outro exemplo são algumas noções mais abstratas tal como ponteiros, principalmente em C, tema deste artigo.
Diferentemente de nós, os computadores não conhecem uma determinada informação por um “rótulo” ou “nome”, e sim pelo endereço onde este dado está alocado na memória. Podemos pensar na memória como um conjunto de “células” que contém um número de bits que armazenam 0 ou 1 e que cada célula está associada a um determinado endereço onde armazena alguma informação para que os programas executados pela máquina possam acessar estes dados e os manipular.
Tendo em vista que para um programa poder usar um dado ele precisa saber de seu endereço na memória, podemos conceber o conceito de ponteiro. O ponteiro é uma variável que “aponta” para algum outro dado, é como se fosse um espaço na memória destinado a guardar o endereço de outra variável ou informação para que esta possa ser manipulada.
Mas agora vem a pergunta, qual a utilidade de um ponteiro? O ponteiro permite algumas operações mais complexas envolvendo a memória, tal como alocação dinâmica com Malloc ou a criação de estruturas de dados mais complexas, etc. Além disso, há alguns detalhes que não são tão facilmente percebidas pelos estudantes em um primeiro momento, tal como o fato de o nome de um vetor ser um ponteiro. Isto mesmo, um vetor nada mais é que um “ponteiro fixo” que aponta para uma determinada posição na memória e que nós usamos o índice para manipular de acordo com a necessidade.
Outra utilidade é a manipulação de dados por referência, por exemplo: passar uma matriz como parâmetro para outra função, permitindo que a matriz original seja modificada ao invés do valor ou objeto passado ser apenas uma cópia, algo que por exemplo ocorre no Javascript onde não há conceito de ponteiro (ao menos não explicitamente), por exemplo:
#includeint vet [5] ={10,20,3,4}; void somadez(int * ref){ for(int i=0;i Outra utilidade não tão evidente de ponteiros, desta vez para linguagens orientadas a objeto, onde podemos, por exemplo, criar objetos dinâmicos e facilitar o trabalho com herança e polimorfismo.
Temos esse exemplo a baixo com C :#includeusing namespace std; class Animal{ public: virtual void som(); }; class Cachorro : public Animal{ public: void som(){ cout som(); //neste caso podemos usar o ponteiro para acessar métodos e atributos de uma classe derivada. return 0; }
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3