Sie sind auf Seite 1von 6

 Noo de Apontador

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

Dulce Mota ISEP

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:

Conta n 1100 da Ana tem um saldo de 100 000;

Conta n 1200 do Pedro tem um saldo de 900 000;

etc.
Atravs do nmero da conta possvel aceder mesma, para assim se realizar
variadas operaes.
Por analogia:

Ana, Pedro, Maria e Paulo so quatro variveis que armazenam valores do


tipo real;

1100, 1200, 1300 e 1400 so os endereos de memria das variveis.

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(Num. Conta: %d,&Ana); /* Num. Conta: 1100*/


printf(Num. Conta: %d,&Pedro); /* Num. Conta: 1200*/
.....
Enquanto que:

printf(%d,Ana);
/* Saldo: 100.000 */
printf(%d,Pedro); /* Saldo: 900.000 */
.....

Dulce Mota ISEP

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:

tipo: Define o tipo da varivel para a qual ptr apontar;

ptr: Define o nome do apontador;

*: Indica que uma varivel do tipo apontador.

Dulce Mota ISEP

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:

printf(Saldo da Conta: %d,*OutroTit);


mostra o saldo da conta da Ana, tendo em conta que OutroTip foi inicializado ao
endereo de Ana.
A tabela abaixo, mostra a informao possvel de se extrair em relao, por
exemplo, conta da Ana:

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)

Resumidamente, um apontador uma varivel apropriada para armazenar um


endereo de uma outra varivel. O apontado de um apontador refere-se ao contedo
de uma varivel cujo endereo foi utilizado para inicializar o primeiro.

Dulce Mota ISEP

38

Programao
em C

Inicializao automtica de apontadores

Os apontadores devem ser sempre inicializados. Se na declarao do apontador


ainda no for conhecido o endereo da varivel para a qual aponta, ento deve ser
inicializado a NULL (constante da linguagem C).
Exemplos:

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:

int m=45, n=25;


int *ptr=NULL;
ptr=&m;
o esquema abaixo, ilustra uma representao em memria destas variveis cujos
endereos (em decimal) so: 200, 210, 220 e 230,
200

210

45
220

25
230

ptr

Dulce Mota ISEP

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

Dulce Mota ISEP

210

40

Das könnte Ihnen auch gefallen