Beruflich Dokumente
Kultur Dokumente
Ponteiros
Suponhamos que existem 2 amigos que
trocam informao entre eles.
Nome
Maria
Fone
Endereo
3424-2345 Rua 01, n 83
Carlos
Ponteiros
O conjunto dos amigos podem ser
representados graficamente por:
Maria
34242345
Rua 01, n 83
Carlos
32343222
Rua das
Graas, n 05
Ponteiros
Note que se falarmos de qualquer nome,
est se referindo ao contedo da
respectiva casa (nmero do fone).
Se estivessemos programando em C
printf(%d,Maria)
3424-2345
printf(%d,Carlos)
3234-3222
Ponteiros
O endereo da Maria Rua 01, n 83
O endereo do Carlos Rua das Graas,
n 05
Em C existe o operador &, que permite
saber qual o endereo de uma varivel,
ou seja, retorna o endereo de uma
varivel.
Ponteiros
Dessa forma para escrevermos os
endereos de Maria e Carlos:
printf(%d,&Maria)
printf(%d,&Carlos)
Rua 01, n 83
Av. das Graas, n 05
Ponteiros
Suponhamos que aparea o vizinho
LUCAS, que no possui telefone e Maria
autorizou a usar de sua casa.
LUCAS Rua 01,
Maria
34242345
Rua 01, n 83
n 83
Av. 7 de
Setembro, n 15
Ponteiros
Como pode se observar, a casa de
LUCAS um pouco diferente das
outras.
As outras podiam ser declaradas como:
Fone Maria, Carlos;
Ponteiros
A casa de LUCAS ter que ser
declarada como uma casa que contm
o endereo de outra casa. Isto ,
LUCAS aponta para uma casa com
fone.
Fone *LUCAS; /* LUCAS no tem um fone, e sim o
endereo em que se encontra um fone.*/
Ponteiros
Se LUCAS contm o endereo de
Maria porque foi iniciada do seguinte
modo:
LUCAS = &Maria;
Ponteiros
Repare nos seguintes valores:
Expresso
Maria
&Maria
Valor
3424-2345
Rua 01, n 83
LUCAS
Rua 01, n 83
&LUCAS
Av. 7 de Setembro, n 15
*LUCAS
3424-2345
Ponteiros
*LUCAS representa o valor que est
colocado no endereo armazenado em
LUCAS.
Note que falar de LUCAS o mesmo
que falar de &Maria, pois a varivel
LUCAS contm o valor do endereo de
Maria.
O endereo de LUCAS o local onde
fica a sua casa.
Ponteiros - conceito
Ponteiro so mecanismos de
manipulao de dados que permitem
manipular diretamente dados contidos
em endereos especficos de memria.
NULL
1000
1001
1002
3000
3001
3002
NULL
1000
1001
1002
3000
3001
3002
NULL
1000
1001
1002
*ptr
3000
3001
3002
NULL
1000
1001
1002
3000
3001
3002
*ptr
Exemplos (Ponteiro)
main()
cont igual a 100;
{
pont igual ao
int *pont, cont, val;
endereo de cont;
val igual ao
cont = 100;
contedo apontado
pont = &cont;
por pont que
val = *pont;
igual ao contedo de
printf(%d,val);
cont, ou seja, 100.
}
Exemplos (Ponteiro)
main( )
{
int x,y,*px,*py;
x = 100;
px = &x;
py = px;
y = *py;
printf(x = %d e y =
%d,x,y);
}
px tem o endereo
de x
py tem o endereo
de x
y vale 100, pois
recebe o contedo
de x, atravs do
ponteiro py.
EXERCCIOS
Seiejso variveis inteiras epeqponteiros paraint,
quais das seguintes expresses de atribuio so ilegais?
a)p = &i;b)*q = &j;c)p = &*&i;
d)i = (*&)j;
e)i = *&j;f)i = *&*&j;
g)q = *p;h)i = (*p)++ + *q