Buscar

aulaPonteiros

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 85 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 85 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 85 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Ponteiros
Prof. Pedro Henrique V. de O. Azevedo
pedro.hvo.azevedo@gmail.com
sites.google.com/site/phvoazevedo
Programac¸a˜o II
1 / 83
Histo´ria no Paı´s dos Telefones
2 / 83
Era uma vez...
Um paı´s onde existia um telefone todas as casas, exceto
as de pessoas que tinham problemas com a justic¸a.
Como em qualquer paı´s, cada casa possuia um enderec¸o,
que era utilizado como identificac¸a˜o da casa.
Obviamente, cada enderec¸o e´ U´NICO, ou seja, na˜o existem
dois enderec¸os iguais em todo o paı´s.
Os habitantes desse paı´s se referenciam, sempre que
possı´vel, a`s casas uns dos outros pelo nome da pessoa
que la´ mora.
3 / 83
Era uma vez...
Vamos supor que neste paı´s existiam treˆs amigos, Joa˜o,
Ana e Pedro, que trocavam telefones entre si. Logo:
Quando falamos de Joa˜o, Ana e Pedro falamos de seus
respectivos telefones.
4 / 83
Voltando ao C...
Quando declaramos treˆs varia´veis em C
int x=4, y=5, z=7;
Quando falamos de X, Y e Z falamos de seus respectivos
valores declarados.
5 / 83
Voltando ao C...
Imaginando que Telefone fosse um tipo da linguagem C,
poderiamos definir suas varia´veis como
Telefone Joa˜o=7894561, Ana=4567812, Pedro=3216598;
E graficamente falando, terı´amos
6 / 83
Voltando ao C...
Oras, ja´ trabalhamos com o nome e o valor desses nomes.
Qual outra informac¸a˜o ainda na˜o estamos utilizando?
O ENDEREC¸O
Em C temos o operador & que permite saber qual o
enderec¸o de uma varia´vel.
7 / 83
Voltando ao C...
Oras, ja´ trabalhamos com o nome e o valor desses nomes.
Qual outra informac¸a˜o ainda na˜o estamos utilizando?
O ENDEREC¸O
Em C temos o operador & que permite saber qual o
enderec¸o de uma varia´vel.
7 / 83
Voltando ao C...
Oras, ja´ trabalhamos com o nome e o valor desses nomes.
Qual outra informac¸a˜o ainda na˜o estamos utilizando?
O ENDEREC¸O
Em C temos o operador & que permite saber qual o
enderec¸o de uma varia´vel.
7 / 83
Voltando ao C...
Se estive´ssemos programando em C terı´amos que
8 / 83
Voltando ao paı´s dos telefones...
Lembrando que nem todas as pessoas no paı´s dos telefo-
nes podiam ter telefone em casa.
Era o caso de SAMAD, acusado de corrupc¸a˜o de desvio
de milho˜es de gigabytes. SAMAD na˜o pode ser preso por
falta de provas concretas mas perdeu o direito de possuir
um telefone em casa.
De uns tempos pra ca´, SAMAD esta´ muito mal de sau´de e
sem telefone na˜o tem como ligar para uma emergeˆncia.
A justic¸a concedeu a SAMAD um local ONDE podera´ reali-
zar as ligac¸o˜es, a casa de Joa˜o.
Logo, SAMAD na˜o possuira´ um telefone em casa, e sim um
local (a casa de Joa˜o) onde podera´ fazer ligac¸o˜es.
9 / 83
Voltando ao paı´s dos telefones...
10 / 83
Voltando ao C...
As outras pessoas podiam ser declaradas como
Telefone Joa˜o=7894561, Ana=4567812, Pedro=3216598;
Pore´m, SAMAD tem uma particularidade pois ele ira´ apon-
tar para a casa onde ele podera´ realizar a ligac¸a˜o
Telefone *SAMAD;
Telefone SAMAD = &Joa˜o;
Em C, o sı´mbolo * indica uma varia´vel que ira´ apontar para
o enderec¸o de uma outra varia´vel de mesmo tipo.
11 / 83
Voltando ao C...
Vamos observar os valores das varia´veis declaradas
Podemos observar que falar de SAMAD e´ o mesmo que
falar de &Joa˜o, pois a varia´vel SAMAD conte´m o valor do
enderec¸o de Joa˜o.
Logo, se uma varia´vel X conte´m o enderec¸o de uma
varia´vel Y, conseguimos acessar o valor de Y a partir de
X colocando um asterı´sco antes da varia´vel X (*X).
12 / 83
Voltando ao C...
Sendo assim, podemos completar a tabela anterior da se-
guinte forma:
13 / 83
Voltando ao paı´s dos telefones e ao C ao mesmo tempo...
Joa˜o deu falta de alguns itens em sua casa apo´s as
idas de SAMAD a` sua casa para realizar ligac¸o˜es para a
emergeˆncia.
Joa˜o entrou na justic¸a contra SAMAD e a justic¸a transferiu
o apontamento de SAMAD para Ana.
Telefone SAMAD = ???;
14 / 83
Voltando ao paı´s dos telefones e ao C ao mesmo tempo...
Joa˜o deu falta de alguns itens em sua casa apo´s as
idas de SAMAD a` sua casa para realizar ligac¸o˜es para a
emergeˆncia.
Joa˜o entrou na justic¸a contra SAMAD e a justic¸a transferiu
o apontamento de SAMAD para Ana.
Telefone SAMAD = &Ana;
Quais valores esta˜o contidos em:
Ana
&Ana
SAMAD
&SAMAD
*SAMAD
15 / 83
A Memo´ria do Computador
Como sabemos, tudo do computador se passa em
memo´ria.
La´ sa˜o carregados nossos programas, jogos e tambe´m as
varia´veis de nosso programa
Assim como os enderec¸os de Joa˜o, Pedro e Ana, cada
posic¸a˜o na memo´ria possui um enderec¸o u´nico represen-
tado por um nu´mero.
16 / 83
A Memo´ria do Computador
Sempre que declaramos uma varia´vel, indicamos seu tipo,
seu nome e precisamos de alguma forma atribuir um valor
para aquela varia´vel.
char ch = ’A’;
char *ptr;
ptr = &ch;
A varia´vel ch ocupa o espac¸o 5000, conte´m como conteu´do
a letra A e o ponteiro ptr aponta para o enderec¸o de
memo´ria de ch.
17 / 83
A Memo´ria do Computador
Sendo assim, qual o valor de:
ch
&ch
ptr
&ptr
*ptr
18 / 83
Ta´, e daı´?
Por que usar ponteiros?
Permite que a func¸a˜o modifique os paraˆmetros recebidos;
Manipulac¸a˜o mais fa´cil de elementos de um vetor;
Alocac¸a˜o e desalocac¸a˜o de memo´ria;
Criac¸a˜o de estruturas de dados mais complexas;
A diferenc¸a entre homens e meninos na programac¸a˜o esta´
certamente do qua˜o bem ele manipula ponteiros.
19 / 83
Encabec¸ando no C
Declarac¸a˜o de ponteiros
Lembrando que o sı´mbolo * indica uma varia´vel que ira´
apontar para o enderec¸o de uma outra varia´vel de mesmo
tipo.
20 / 83
Encabec¸ando no C
Operadores & e *
21 / 83
Encabec¸ando no C
Cuidado com ponteiros
Qual a saı´da do co´digo a seguir?
22 / 83
Encabec¸ando no C
Ponteiro: NULL
23 / 83
Encabec¸ando no C
Operac¸o˜es com Ponteiros
24 / 83
Encabec¸ando no C
Operac¸o˜es com Ponteiros
25 / 83
Encabec¸ando no C
Ponteiros e Vetores
26 / 83
Encabec¸ando no C
Ponteiros e Vetores
27 / 83
Encabec¸ando no C
28 / 83
Encabec¸ando no C
Alocac¸a˜o Dinaˆmica de Memo´ria
29 / 83
Encabec¸ando no C
Problema
30 / 83
Encabec¸ando no C
Problema
31 / 83
Encabec¸ando no C
Alocac¸a˜o Dinaˆmica de Memo´ria
32 / 83
Encabec¸ando no C
Func¸o˜es de Alocac¸a˜o Dinaˆmica
33 / 83
Encabec¸ando no C
Alocac¸a˜o Dinaˆmica: sizeof()
34 / 83
Encabec¸ando no C
Alocac¸a˜o Dinaˆmica: malloc()
35 / 83
Encabec¸ando no C
Alocac¸a˜o Dinaˆmica: malloc()
36 / 83
Encabec¸ando no C
Alocac¸a˜o Dinaˆmica: malloc()
37 / 83
Encabec¸ando no C
Alocac¸a˜o Dinaˆmica: malloc()
38 / 83
Encabec¸ando no C
Alocac¸a˜o Dinaˆmica: calloc()
39 / 83
Encabec¸ando no C
Alocac¸a˜o Dinaˆmica: calloc()
40 / 83
Encabec¸ando no C
Alocac¸a˜o Dinaˆmica: realloc()
41 / 83
Encabec¸ando no C
Alocac¸a˜o Dinaˆmica: realloc()
42 / 83
Encabec¸ando no C
Alocac¸a˜o Dinaˆmica: realloc()
43 / 83
Encabec¸ando no C
Alocac¸a˜o Dinaˆmica: free()
44 / 83
Encabec¸ando no C
Alocac¸a˜o Dinaˆmica: free()
45 / 83
Encabec¸ando no C
Alocac¸a˜o Dinaˆmica: free()
46 / 83
Encabec¸ando no C
Alocac¸a˜o Dinaˆmica: free()
47 / 83
Encabec¸ando no C
Exercı´cios
48 / 83
Encabec¸ando no C
Exercı´cios
49 / 83
Func¸o˜es e Ponteiros
50 / 83
Passagem por Valor
51 / 83
Passagem por Valor
52 / 83
Passagem por Valor
53 / 83
Passagem por Refereˆncia
54 / 83
Passagem por Refereˆncia
55 / 83
Passagem por Refereˆncia
56 / 83
Ainda na˜o me convenceu...
57 / 83Ainda na˜o me convenceu...
58 / 83
Exercı´cios
Utilizando func¸o˜es com ponteiros, vamos trocar os valores
de X e Y.
59 / 83
Vetores e Refereˆncia
60 / 83
Vetores e Refereˆncia
61 / 83
Vetores e Refereˆncia
Exemplo:
Retorno de vetor ponteiro (func¸a˜o CriaVetor). 62 / 83
Matrizes e Refereˆncia
63 / 83
Matrizes e Refereˆncia
Exemplo:
Retorno de matriz ponteiro (func¸a˜o CriaMatriz). 64 / 83
Func¸o˜es e Struct
65 / 83
Func¸o˜es e Struct
66 / 83
Func¸o˜es e Struct
67 / 83
Func¸o˜es e Struct
Exemplo:
68 / 83
Func¸o˜es e Struct
69 / 83
Func¸o˜es e Struct
70 / 83
Func¸o˜es e Struct
Exemplo:
71 / 83
Func¸o˜es e Struct
72 / 83
Func¸o˜es e Struct
Exemplo:
73 / 83
Recursividade
74 / 83
Recursividade
75 / 83
Recursividade
76 / 83
Recursividade
77 / 83
Recursividade
78 / 83
Recursividade
79 / 83
Recursividade
80 / 83
Recursividade
81 / 83
Recursividade
82 / 83
Recursividade
83 / 83
	Ponteiros

Outros materiais