Beruflich Dokumente
Kultur Dokumente
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.
http://www.tiexpert.net/programacao/c/ponteiros.php