aula 09: - ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/pe-aula09.pdf · 1 aula 09: -...

46
1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco [email protected] 3Q-2017

Upload: others

Post on 07-Oct-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

1

Aula 09: - Ponteiros (parte 2)

MCTA028 – Programação Estruturada

Prof. Jesús P. Mena-Chalco

[email protected]

3Q-2017

Page 2: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

2

Sobre funções (“uma ideia”)

Page 3: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

3

Qual função é mais “eficiente”?

Page 4: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

4

1995 2015

Page 5: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

5

Qual função é mais “eficiente”?

Número de multiplicações?Proporcional a k

Número de multiplicações?Proporcional a log2(k)

Page 6: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

6

Exercício de Fibonacci

https://visualgo.net/en/recursion Número de chamados?Proporcional a 2^n

Page 7: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

7

Page 8: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

8

Qual função é mais “eficiente”?

http://bigocheatsheet.com/?utm_content=buffer0b573

Page 9: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

9

Page 10: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

10

Page 11: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

11

Melhores momentos da aula anterior

Page 12: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

12

INSTRUÇÕES

Armazena o código compilado (na linguagem máquina)

[~bytes]

PILHA (STACK)

Armazena as variáveis ao longo da execução do programa.

[~Mbytes]

Processo na memória

HEAP

Espaço de memória principal gerenciado pelo SO.

[~Toda a memória RAM]

Alocação estática Alocação dinâmica

int x;double M[10][20];char *c;

double M = malloc(...);

Page 13: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

13

INSTRUÇÕES PILHA (STACK)

Processo na memória

HEAP

Ponteiros?

Em Java e Python o uso é transparente. Não precisa se preocupar de alocar e

liberar memória

Page 14: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

14

Endereços

...

01010111

11000011

01100100

11100010

...

37FD00

37FD01

37FD02

37FD03

Geralmente o endereço do objeto é o endereço do 1ro byte.

Page 15: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

15

Endereços

Há vários tipos de ponteiros:P. para caracteresP. para inteirosP. para registrosP. para ponteiros para inteirosP. para função

int* p ;

int *p;

int * p;

← O “*” modifica a variável e não o int (mais aceito)

← Um tipo de dado novo int* (conceitualmente correto)

O compilador C aceita qualquer das formas.

Page 16: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

16

exemploPonteiro.c

Operadores unarios & → Referência: na frente de uma variável: Devolve o endereço de memória onde a variável está armazenada

* → Derreferência: na frente de variável ou expressão: Devolve o valor ou conteúdo do endereço de memória apontada pela variável ou expressão

Page 17: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

17

Teste interativo usando cdecl

https://cdecl.org/

Page 18: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

18

Vetores e endereços

Page 19: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

19

Vetores

Os elementos de um vetor são alocados consecutivamente na memória do computador.

Se cada elemento ocupa b bytes, a diferença entre os endereços de dois elementos consecutivos será de b.

(ex. inteiros ocupam 4 bytes, em uma plataforma de 64 bits)

Page 20: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

20

Vetores

Os elementos de um vetor são alocados consecutivamente na memória do computador.

Se cada elemento ocupa b bytes, a diferença entre os endereços de dois elementos consecutivos será de b.

O compilador C cria a ilusão de que b vale 1 qualquer que seja o tipo dos elementos do vetor.

Page 21: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

21

Alocação de memória

Page 22: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

22

Alocação de memória

IdeiaV+i*sizeof(int)

Page 23: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

23

Alocação memória

Page 24: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

24

Quando não for possívelSeparar memoria suficiente

Um ponteiro NULO é devolvido

Page 25: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

25

Quando não for possívelSeparar memoria suficiente

Um ponteiro nulo é devolvido

A diferença de ponteirosDevolve um long e é

Permitida se os dois forem doMesmo tipo

Page 26: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

26

Quando não for possívelSeparar memoria suficiente

Um ponteiro nulo é devolvido

A diferença de ponteirosDevolve um long e é

Permitida se os dois forem doMesmo tipo

10 20 100

Page 27: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

27

Os ponteiros facilitam a

alocação dinâmicade memória

Page 28: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

28

Matrizes

Material adaptado da aula de Matrizes de Ronaldo F. Hashimoto e Carlos H. Morimoto (IME/USP)

Page 29: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

29

Declara uma matriz Mde 100 linhas

com 200 colunas(20mil inteiros)

A memória do computador é linear!

Page 30: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

30

Estrutura da matriz na memória do computador

Page 31: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

31

Disposição dos 20mil elementos da matriz M na memória

Qual o endereço de M[0][78]?(tendo como base M[0][0])

Page 32: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

32

Disposição dos 20mil elementos da matriz M na memória

Qual o endereço de M[0][78]?(tendo como base M[0][0]) &M[0][0]+78

Page 33: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

33

Disposição dos 20mil elementos da matriz M na memória

Qual o endereço de M[78][21]?(tendo como base M[0][0])

Page 34: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

34

Disposição dos 20mil elementos da matriz M na memória

Qual o endereço de M[78][21]?(tendo como base M[0][0]) &M[0][0] + (78*200+21)

Page 35: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

35

Índices

Na linguagem C não existe verificação de índices fora da matriz/vetor.Quem deve controlar o uso correto dos índices é o programador.

O acesso utilizando um índice errado pode ocasionar o acesso de outra variável na memória.→ Se o acesso à memória é indevido você recebe a mensagem “segmentation fault”.

Page 36: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

36

Matrizes

Page 37: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

37

Matrizes

Page 38: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

38

Page 39: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

39

Teste de avaliação

Page 40: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

40

Questão 1 - a

Escreva o resultado da execução do seguinte programa

6 7 8 9 0 1 2 3 4 5

0 1 2 3 4 5 6 7 8 9

Page 41: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

41

Questão 1 - b

Escreva o resultado da execução do seguinte programa

0 1 2 3 4

0 1 2 3 4 ...

1 2 3 4 5

2 3 4 5 6

3 4 5 6 7

4 5 6 7 8

0 1 2 3 . . .

Page 42: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

42

Questão 1 - c

Macro!

0 1 2 3 4 ...

0 1 2 3 . . .

5

A

Page 43: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

43

Função com matriz como parâmetro

O nome de uma matriz dentro do parâmetro de uma função é utilizado como sendo um ponteiro para o primeiro elemento da matriz que está sendo usada na hora de utilizar a função.

→ Não é alocada memória (novamente) para um vetor passado por parâmetro para uma função.

Page 44: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

44

Questão 2

Escreva um programa que leia um número inteiro positivo n seguido de n números inteiros e imprima esses n números em ordem invertida.

Por exemplo, ao receber5 22 33 44 55 66

o seu programa deve imprimir 66 55 44 33 22

Seu programa não deve impor limitações sobre o valor de nSeu programa não deve usar colchetes.

Page 45: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

45

Questão 2

Os ponteiros facilitam a

alocação dinâmicade memória

Page 46: Aula 09: - Ponteiros (parte 2)professor.ufabc.edu.br/.../pe-3q-2017/PE-aula09.pdf · 1 Aula 09: - Ponteiros (parte 2) MCTA028 – Programação Estruturada Prof. Jesús P. Mena-Chalco

46