A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Ponteiros. Programação II Professora: Mai-Ly vanessa horário: ter 9h-11h; sex 11h-13h Aula 1.

Apresentações semelhantes


Apresentação em tema: "Ponteiros. Programação II Professora: Mai-Ly vanessa horário: ter 9h-11h; sex 11h-13h Aula 1."— Transcrição da apresentação:

1 Programação II Professora: Mai-Ly vanessa horário: ter 9h-11h; sex 11h-13h Aula 1

2 Ponteiros

3 Variáveis Podem ser divididas em: Variáveis estáticas
Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta Vinculação -> Por meio de ponteiros Vantagens

4 Áreas de Memória Mapa de memória de um computador padrão IBM-PC

5 O tipo pointer Sua posição de memória armazena um endereço de outra posição de memória, que por sua vez pode conter um dado. Não armazena um dado. Notação utiliza ^ Exemplos: Var P_nome : ^string; P_idade : ^integer; P_salario : ^real;

6 O tipo pointer Exemplos: write(‘Idade = ‘,P_idade^);
Sugestão: Padronização de nomes Ponteiro vazio é preenchido com NIL Ex: P_idade (Acessa o endereço da posição de memória referenciada)

7 Exemplo: Criação de um ponteiro apontando para uma variável inteira. Criação de um ponteiro apontando para uma variável real. Exercicios: Declare 2 variáveis inteiras e dois ponteiros para inteiros que devem ser associados ao endereço das variáveis. Usando somente os ponteiros faça com que as variáveis recebam o dobro e o triplo de seu valor respectivamente,

8 Alocação dinâmica de memória
Memória alocada conforme a necessidade Evita DESPERDÍCIO DE MEMÓRIA X MEMÓRIA INSUFICIENTE Quantidade de memória pode ser determinada em tempo de execução

9 Alocação dinâmica de memória
Procedimento new(ponteiro) Aloca espaço de memória alta para armazenar uma variável alocada dinamicamente por vez.

10 Alocação dinâmica de memória
IMPORTANTE: Sempre que um espaço de memória for alocado dinamicamente, ele tem que ser liberado explicitamente. Ou seja a cada new, deve corresponder um dispose, pois o espaço de memória alocado explicitamente não será liberado automaticamente. Procedimento dispose(ponteiro) Libera o espaço de memória, endereçada pelo ponteiro, existente na área de memória (HEAP).

11 Algumas funções de gerenciamento de memória em Pascal
MemAvail Exibe a quantidade total de memória livre no HEAP, ou seja a soma de todos os blocos de memória livres. Procedimento MaxAvail Retorna o tamanho do maior bloco contínuo de memória no HEAP. Este valor corresponde ao maior tamanho possível de variável dinâmica que pode ser alocado a qualquer tempo. Obs: Estas funções estão disponíveis apenas no Turbo Pascal.

12 Alocação dinâmica de memória - exercícios -
1)Aloque dinamicamente duas variáveis do tipo inteiro. Leia dois valores nestas variáveis. Verifica se o valor de A é maior que B. Em caso afirmativo exiba o quociente de A dividido por B. 2) Leia 5 valores e apresente o total da soma dos mesmos. Crie dinamicamente a variável que irá receber os valores. Exiba a quantidade de memória antes e depois da alocação de memória para a variável e depois da liberação da mesma.

13 Alocação dinâmica de memória
GetMem Também é usado para alocar dinamicamente espaço de memória para uma variável. Gerencia melhor o espaço de memória. A variável criada pode ter o número de bytes especificado pelo programador. Sintaxe GetMem(ponteiro,numero_de_bytes); Ex: GetMem(P_nome, 30); GetMem(P_total, 20); Como saber quantos bytes reservar? Sizeof(tipo)

14 Algumas funções de gerenciamento de memória em Pascal
Função útil na alocação de blocos de memória: SizeOf Retorna o número de bytes ocupados por um argumento (funciona tanto no Pascal como no Delphi).

15 Alocação dinâmica de memória
FreeMem => Destrói uma variável criada dinamicamente, liberando seu espaço de memória. Deve ser usada em conjunto com GetMem. Ex: FreeMem(P_nome, 30); FreeMem(P_total, 20); Obs: Especificar exatamente a mesma quantidade de bytes que foi alocada.

16 Alocação dinâmica de memória
Alocação dinâmica de memória na verdade tem uma grande utilidade para alocação de blocos de dados. Até agora vimos como fazer a alocação apenas de uma variável por vez. Veremos como trabalhar com vetores e matrizes alocados dinamicamente.

17 Alocação dinâmica de memória – Vetores e matrizes
Características Satisfaz a necessidade de criarmos uma matriz com uma quantidade de elementos desconhecida em tempo de projeto. Deve-se criar um tipo matriz. Pode-se usar a constante MaxInt pré- definida. Declara-se uma variável que seja do tipo ponteiro para o tipo matriz criado. Faz-se alocação dinâmica de memória usando-se GetMem e SizeOf.

18 Alocação dinâmica de memória – Vetores e matrizes
Ex de criação do tipo e declaração do ponteiro: Type P_mat = ^vetor; vetor = array[1..MaxInt] of integer; matriz = array[1..181,1..181]; Var aponta : P_mat; aponta_mat : ^matriz;

19 Alocação dinâmica de memória – Vetores e matrizes
Ex. de alocação dinâmica da memória do vetor: getMem(aponta, N * SizeOf(integer)); Onde N é a quantidade de elementos que se deseja no vetor Ex. de utilização dos elementos do vetor: for x:= 1 to N do writeln(aponta^[x]);

20 Alocação dinâmica de memória – Vetores e matrizes
Ex. de alocação dinâmica da memória da matriz: getMem(aponta, L * C * SizeOf(integer)); Onde L é a quantidade de linhas que se deseja na matriz e C é a quantidade de colunas. Ex. de utilização dos elementos da matriz: for x:= 1 to L do for y := 1 to C do writeln(aponta_mat^[x,y]);

21 Alocação dinâmica de memória – Vetores e matrizes
Liberando a memória do vetor freeMem(aponta,N * SizeOf(integer)); Liberando a memória da matriz freeMem(aponta_mat, L * C * SizeOf(integer));

22 Exercício Leia um número inteiro N e aloque dinamicamente memória para um vetor de N inteiros. Leia os valores do vetor e exiba a média dos valores lidos.


Carregar ppt "Ponteiros. Programação II Professora: Mai-Ly vanessa horário: ter 9h-11h; sex 11h-13h Aula 1."

Apresentações semelhantes


Anúncios Google