Beruflich Dokumente
Kultur Dokumente
Introduo
Em termos prticos, um apontador uma varivel que guarda um endereo de
memria, ao invs de outros tipos de dados, tais como: tipo inteiro, real, carcter. A
linguagem C proporciona o acesso a endereos de memria, fornecendo, deste modo,
uma grande flexibilidade no manuseamento de dados, tirando tambm vantagens ao
nvel de poupana de recursos. Em contra partida, a programao perde em termos de
declaratividade uma vez que os programas so de leitura mais difcil. Contudo,
medida que o utilizador tem mais experincia no manuseamento de apontadores, a
falta de alguma declaratividade remetida normalmente para segundo plano.
Para um melhor enquadramento neste assunto to importante na programao em
C, apresentado de seguida uma situao fictcia, a qual pretende realar o conceito
de endereo e de apontador.
No Banco Confiana Total existem diversas contas: a conta da Ana, do Pedro,
da Maria, do Paulo, entre outras.
Ana
100.000
Pedro
1100
Maria
50.000
1300
900.000
1200
Paulo
250.000
1400
35
Programao
em C
Cada conta tem um saldo e um nmero. Com base no esquema anterior, tem-se:
etc.
Atravs do nmero da conta possvel aceder mesma, para assim se realizar
variadas operaes.
Por analogia:
Para mostrar os saldos de cada uma das contas, suficiente escrever instrues
do tipo:
printf(Saldo %d,Ana);
printf(Saldo %d,Pedro);
.....
O nmero da conta, ou por analogia, o endereo de uma varivel, atribudo a cada
conta, pode ser acedido atravs do operador &. Este operador unrio significa
endereo de o qual permite conhecer o endereo de uma varivel.
Comparativamente,
printf(%d,Ana);
/* Saldo: 100.000 */
printf(%d,Pedro); /* Saldo: 900.000 */
.....
36
Programao
em C
Prosseguindo com as contas bancrias, normal uma conta ter mais do que um
titular. Cada titular da conta precisa de conhecer o nmero da conta podendo haver
vrios titulares com acesso mesma conta.
Na programao, para que o contedo de uma varivel possa ser acedido por duas
ou mais variveis, necessrio que estas guardem o endereo da varivel que tem o
contedo. Nesse sentido, estas variveis tm de ser do tipo apontador.
Na figura, a varivel OutroTit armazena o endereo (1100) da varivel Ana
passando, assim, a poder manipular o contedo da varivel Ana. Desta forma, a
varivel OutroTit precisa de ser declarada do tipo apontador.
Ana
100 000
1100
OutroTit
1100
2000
Diz-se que OutroTit um apontador que aponta para a varivel Ana a qual do
tipo inteiro (saldo da conta).
Declarao de apontadores
A declarao de um apontador segue a seguinte sintaxe:
tipo * ptr;
Onde:
37
Programao
em C
Exemplos:
char *p;
int *idade;
int *OutroTit;
Conforme referido anteriormente, o endereo de uma varivel obtido atravs do
operador &. Deste modo, a instruo:
OutroTit = &Ana;
inicializa a varivel OutroTit ao endereo da varivel Ana.
O apontado pelo apontador, isto , o valor da varivel cujo endereo est
armazenado no apontador, obtido colocando o smbolo * antes do nome do
apontador.
Por exemplo, a instruo:
Expresso
Ana
&Ana
OutroTit
&OutroTit
*OutroTit
Valor
100000
1100
1100
2000
100000
Descrio
Saldo da conta
Identificao da conta (endereo)
Identificao da conta (valor)
Identificao de OutroTit (endereo)
Saldo da conta (valor Apontado por OutroTit)
38
Programao
em C
int *p = NULL;
int n= 3;
int *ptr=&n;
De notar que na ltima instruo guardado o endereo da varivel n na varivel
ptr (apontador). O smbolo * declara um apontador e, na declarao no significa
apontado de.
A constante simblica NULL indica que o apontador no aponta, pelo menos por
enquanto, para nenhuma varivel.
Com base nas seguintes instrues:
210
45
220
25
230
ptr
210
39
Programao
em C
Significado:
Expresso
m
&m
ptr
&ptr
*ptr
Valor
45
210
210
230
45
Para alterar o valor da varivel m para 55, pode-se usar qualquer uma das
seguintes instrues:
m=55;
// ou
*ptr=55;
200
210
55
220
25
230
ptr
210
40