Vetores como ponteiros
Tese: Vetores como ponteiros. Pesquise 862.000+ trabalhos acadêmicosPor: sdfdsfsd • 9/9/2013 • Tese • 2.481 Palavras (10 Páginas) • 423 Visualizações
UOL - O melhor conteúdo
Assine 0800 721 2009
SAC
Bate-papo
Notícias
Esporte
Entretenimento
Mulher
Shopping
XPG
BLOG GRÁTIS
HOSPEDAGEM HTML GRÁTIS
LOJA GRÁTIS
Orkut
Vetores como ponteiros
Ponteiros como vetores
Ponteiro para ponteiro
Ponteiros
Ponteiros são 'variáveis' que guardam um endereço de memória.
Os int´s guardam inteiros.
Os float´s guardam números de ponto flutuante (real).
Os char´s guardam caracteres.
Por exemplo. quando você anota o endereço de uma pessoa você está criando um ponteiro. O ponteiro é este seu pedaço de papel. Ele tem anotado um endereço.
Qual é o sentido disto? Simples. Quando você anota o endereço de alguém, posteriormente você terá um acesso facil e rápido a este endereço. O C funciona assim. Você anota o endereço de algo numa variável ponteiro para depois usar. Da mesma maneira, uma agenda, onde são guardados endereços de vários amigos, poderia ser vista como sendo uma matriz de ponteiros no C.
Um ponteiro também tem tipo. Veja: quando você anota um endereço de um amigo você o trata diferente de quando você anota o endereço de uma firma. Apesar de o endereço dos dois locais ter o mesmo formato (rua, número, bairro, cidade, etc.) eles indicam locais cujos conteúdos são diferentes. Então os dois endereços são ponteiros de tipos diferentes.
No C quando declaramos ponteiros nós informamos ao compilador para que tipo de variável vamos apontá-lo. Um ponteiro int aponta para um inteiro, isto é, guarda o endereço de um inteiro. logo outros tipos apontarão para outros tipos de conteúdos.
Declaração de Ponteiros
Para declarar um ponteiro temos a seguinte forma geral:
tipo_do_ponteiro *nome_da_variável;
Exemplos.
int *nome;
float *Media;
char *sexo;
struct aluno *faculdade;
É o asterisco (*) que faz o compilador saber que aquela variável não vai guardar um valor mas sim um endereço para aquele tipo especificado. Vamos ver exemplos de declarações:
int *pt; // ponteiro (pt) do tipo inteiro.
char *temp,*pt2; // ponteiros (temp, pt2) do tipo caracter
Eles ainda não foram inicializados (como toda variável do C que é apenas declarada). Isto significa que eles apontam para um lugar indefinido. Este lugar pode estar, por exemplo, na porção da memória reservada ao sistema operacional do computador.
Usar o ponteiro nestas circunstânicias pode levar a um travamento do micro, ou a algo pior. O ponteiro deve ser inicializado (apontado para algum lugar conhecido) antes de ser usado! Isto é de suma importância!
Para atribuir um valor a um ponteiro recém-criado poderíamos igualá-lo a um valor de memória. Mas, como saber a posição na memória de uma variável do nosso programa? Seria muito difícil saber o endereço de cada variável que usamos, mesmo porque estes endereços são determinados pelo compilador na hora da compilação e realocados na execução. Podemos então deixar que o compilador faça este trabalho por nós. Para saber o endereço de uma variável 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. A expressão &count nos dá o endereço de count, o qual armazenamos em pt. Simples, não é? Repare que não alteramos o valor de count, que continua valendo 10.
Como nós colocamos um endereço em pt, ele está agora "liberado" para ser usado. Podemos, por exemplo, alterar o valor de count usando pt. Para tanto vamos usar o operador "inverso" do operador &. É o operador *.
O operador * possui 2 utilizações distintas no uso de ponterios.
Se utilizado na declaração de uma variável, indica que a mesma é um ponteiro, durante a implementação do programa seu uso é referente a manipulação do conteudo, valor de variável.
O operador & é utilizado para a manipulação do endereço de memória
No exemplo acima, uma vez que fizemos pt=&count a expressão *pt é equivalente ao próprio count (conteúdo da variável). Isto significa que, se quisermos mudar o valor de count para 12, basta fazer *pt=12.
Vamos fazer uma pausa e voltar à nossa analogia para ver o que está acontecendo.
Digamos que exista uma firma. Ela é como uma variável que já foi declarada. Você tem um papel em branco onde vai anotar o endereço da firma. O papel é um ponteiro do tipo firma. Você então liga para a firma e pede o seu endereço, o qual você vai anotar no papel. Isto é equivalente, no C, a associar o papel à firma com o operador &. Ou seja, o operador & aplicado à firma é equivalente a você ligar para a mesma e pedir o endereço. Uma vez de posse do endereço no papel você poderia, por exemplo, fazer uma visita à firma. No C você faz uma visita à firma aplicando o operador * ao papel. Uma vez dentro da firma você pode copiar seu conteúdo ou modificá-lo.
Uma
...