Sie sind auf Seite 1von 2

www.tiexpert.

net

Pg. 1 de 2

Ponteiros
Ponteiros so as mais poderosas e tambm as mais controversas ferramentas da linguagem C e C++. Ponteiros foram abolidos de linguagens novas baseadas em C, como por exemplo Java. Mas, um programa que utiliza ponteiros sabiamente tem um desempenho muito maior, pois ponteiros trabalham diretamente com a memria. Dessa forma, praticamente, podemos manipular toda a quantia de memria do computador, mesmo que seja pouca ou muita. Ponteiros como o prprio nome diz, quem aponta. Sua nica funo, mas de extrema importncia, guardar o endereo de memria de uma varivel. Quando declaramos uma varivel e executamos o programa, o sistema operacional se encarrega de alocar (reservar) o espao necessrio para o tipo de dado e "marca" aquele espao de memria com um nome, que o nome da varivel. O papel do ponteiro guardar exatamente este endereo. Como ponteiros guardam endereos de memria, podemos guardar o endereo de qualquer parte da memria, mesmo que este espao no tenha sido reservado no incio da execuo do programa. Podemos declarar ponteiros ou usar referenciamento e dereferenciamento. Ponteiros so declarados como se fossem variveis, mas contendo um indicador (que um asterisco). Por exemplo, se formos criar dois ponteiros, sendo um para um endereo de memria contendo um dado float e outro contendo um int, faramos: float *ponteiroFloat int *ponteiroInt Pronto, agora j temos nossos ponteiros criados. Agora, vamos ver realmente como eles funcionam.

Referncia
Referncia quando nos referimos diretamente ao identificador do endereo da memria. A memria na verdade uma grande tabela com clulas sequenciais, cada clula tem seu prprio endereo que segue um padro contnuo. Ou seja, a primeira clula ser 0x00000000, a segunda 0x00000001, a terceira 0x00000002, e assim por diante. Quando fazemos referncia, estamos obtendo exatamente este valor, que o endereo da clula na memria. A referncia dada pelo operador &. Ento, vamos imaginar que temos uma varivel inteira chamada var1 que vale 100. Iremos criar um ponteiro chamado ptr1 que ir obter o endereo de memria onde est var1. #include <iostream> #include <cstdlib> using namespace std; int main (){ int var1 = 100; int *ptr1; ptr1 = &var1; cout << ptr1 << endl; system ("pause"); } Perceba que aqui ns atribumos a ptr1 o endereo de memria de var1 (&var1) e no o valor contido em var1. Portanto, o valor de ptr1 no ser 100, mas um endereo de memria 0x "algum hexadecimal". Pois impossvel saber qual ser o endereo de uma varivel antes da http://www.tiexpert.net/programacao/c/ponteiros.php

www.tiexpert.net
execuo do programa.

Pg. 2 de 2

Dereferncia
Dereferncia quando nos referimos ao valor contido no endereo armazenado, ou seja, o contrrio da operao de referncia. A dereferncia busca o valor que est no endereo gravado no ponteiro, isso quer dizer que o valor obtido no est no ponteiro, mas no endereo que ele aponta. importante entender isso porque quando alteramos o valor referenciado pelo ponteiro, na verdade estamos alterando o valor da varivel original e no do ponteiro. A dereferencia dada pelo operador *. Ainda usando o exemplo da varivel var1. #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"); } Portanto, resumidamente, ponteiros se utilizam de referncia e dereferncia para acessar a memria, sendo a referncia (&) o endereo de memria e a dereferncia (*) o valor contido no endereo de memria.

Erros Comuns ao Utilizar Ponteiros


Um dos problemas que levaram a extino do uso de ponteiros em linguagens mais recentes baseadas em C so os erros de lgica cometidos por programadores (inclusive experientes) que muitas vezes levava o programa ao crash ou erro fatal. A seguir, esto alguns problemas comuns que lidamos ao trabalharmos com ponteiros. Ponteiros devem sempre apontar para algum endereo de memria. Portanto, todo ponteiro deve ser inicializado antes de ser utilizado. Ex.: int *ptr1; cout << ptr1;. Ponteiros no guardam valores, apenas endereos de memria, ou seja, se atribumos um valor ao ponteiro, esse valor ser um novo endereo de memria. Ex.: ptr1 = &var1; ptr1 = 100; Ns mudamos o endereo de memria que ptr1 est apontando, agora ele no aponta mais para o endereo de var1, e sim, para o endereo 100. Mas, o que tem no endereo 0x100 ? Esse um erro muito comum. Inicializar um ponteiro com o valor de uma dereferncia. Ex.: int *ptr1 = *var1;. Esses so alguns dos erros mais comuns, embora praticamente todos os compiladores so capazes de impedir que eles ocorram.
Autor: Denys William Xavier Este artigo est sob Licena Creative Commons Para ver uma cpia desta licena, visite http://creativecommons.org/licenses/by-nc-sa/2.5/br/ ou envie uma carta para Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.

http://www.tiexpert.net/programacao/c/ponteiros.php

Das könnte Ihnen auch gefallen