um valor dememoria. Mas, como saber a posicao na memoria de uma variavel do nosso programa? Seriamuito dificil saber o endereco de cada variavel que usamos, mesmo porque estes enderecossao determinados pelo compilador na hora da compilacao e realocados na execucao. Podemosentao deixar que o compilador faca este trabalho por nos. Para saber o endereco de umavariavel basta usar o operador &. Veja o exemplo:int count=10;int *pt;pt=&count;Criamos um inteiro count com o valor 10 e um apontador para um inteiro pt. Aexpressao &count nos da o endereco de count, o qual armazenamos em pt. Simples, nao e?Repare que nao alteramos o valor de count, que continua valendo 10.Como nos colocamos um endereco em pt, ele esta agora "liberado" para ser usado.Podemos, por exemplo, alterar o valor de count usando pt. Para tanto vamos usar o operador"inverso" do operador &. E o operador *. No exemplo acima, uma vez que fizemos pt=&counta expressao *pt e equivalente ao proprio count. Isto significa que, se quisermos mudar ovalor de count para 12, basta fazer *pt=12.Vamos fazer uma pausa e voltar a nossa analogia para ver o que esta acontecendo.Digamos que exista uma firma. Ela e como uma variavel que ja foi declarada. Voce temum papel em branco onde vai anotar o endereco da firma. O papel e um ponteiro do tipo firma.Voce entao liga para a firma e pede o seu endereco, o qual voce vai anotar no papel. Isto eequivalente, no C, a associar o papel a firma com o operador &. Ou seja, o operador &aplicado a firma e equivalente a voce ligar para a mesma e pedir o endereco. Uma vez deposse do endereco no papel voce poderia, por exemplo, fazer uma visita a firma. No C voce fazuma visita a firma aplicando o operador * ao papel. Uma vez dentro da firma voce pode copiarseu conteudo ou modifica-lo.Uma observacao importante: apesar do simbolo ser o mesmo, o operador *(multiplicacao) nao e o mesmo operador que o * (referencia de ponteiros). Para comecar oprimeiro e binario, e o segundo e unario pre-fixado.Aqui vao dois exemplos de usos simples de ponteiros:#include <stdio.h>int main (){int num,valor;int *p;num=55;p=&num; /* Pega o endereco de num */valor=*p; /* Valor e igualado a num de uma maneira indireta */44printf ("\n\n%d\n",valor);printf ("Endereco para onde o ponteiro aponta: %p\n",p);printf ("Valor da variavel apontada: %d\n",*p);return(0);}#include <stdio.h>int main (){int num,*p;num=55;p=&num; /* Pega o endereco de num */printf ("\nValor inicial: %d\n",num);*p=100; /* Muda o valor de num de uma maneira indireta */printf ("\nValor final: %d\n",num);return(0);}Nos exemplos acima vemos um primeiro exemplo do funcionamento dos ponteiros. Noprimeiro exemplo, o codigo %p usado na funcao printf() indica a funcao que ela deveimprimir um endereco.Podemos fazer algumas operacoes aritmeticas com ponteiros. A primeira, e maissimples, e igualar dois ponteiros. Se temos dois ponteiros p1 e p2 podemos iguala-los fazendop1=p2. Repare que estamos fazendo com que p1 aponte para o mesmo lugar que p2. Sequisermos que a variavel apontada por p1 tenha o mesmo conteudo da variavel apontada porp2 devemos fazer *p1=*p2. Basicamente, depois que se aprende a usar os dois operadores(& e *) fica facil entender