Objetivo da Aula
Nivelar os alunos no que diz respeito ao uso de ponteiros e arquivos tipados.
Slide 2
Contedo
Alocao Dinmica de Memria Ponteiros Tipados
Alocao Desalocao
Slide 3
Ponteiros
Um ponteiro uma varivel cujo contedo um endereo de memria. Quando este contedo o endereo de outra varivel, dizemos que o ponteiro aponta para esta outra varivel. Um ponteiro pode ser tipado ou sem tipo. Um ponteiro tipado aponta para um endereo de memria cujo contedo de um tipo predefinido. Um ponteiro sem tipo pode apontar para qualquer tipo de dados.
Slide 4
Ponteiro Tipado
Declarao <PointerName> : ^<Type>; Exemplo PNumero : ^Integer; Representao Grfica
O contedo do ponteiro o endereo de uma varivel do tipo Integer
Endereo da Varivel
PNumero 0x1234
0x1234 10
Contedo da Varivel
Slide 5
Ponteiro Tipado
Outra representao PNumero aponta para a varivel X.
PNumero X 10
Varivel X do tipo Integer
Para acessar o contedo da varivel para a qual o ponteiro aponta, utiliza-se o caractere ^ Exemplo Writeln(IntToStr(PNumero^));
No exemplo acima, estamos escrevendo em tela, o contedo do endereo para o qual o ponteiro aponta. Neste caso, ser impresso o valor 10.
Slide 6
Ponteiro Tipado
Obtendo do Endereo de uma Varivel Para que um ponteiro aponte para determinada varivel, necessrio conhecer seu endereo e atribu-lo ao ponteiro.
O endereo obtido a partir do caractere @.
Exemplo
program PonteiroTipado; var X : Integer; PNumero : ^Integer; begin 1 X := 10; 2 PNumero := @X; 3 Writeln(IntToStr(PNumero^)); Readln; End.
Slide 7
Ponteiro Tipado
Na linha 1, o valor inteiro 10 atribudo varivel X. Inicialmente, o ponteiro PNumero no aponta para nenhuma rea de memria. Diz-se que PNumero aponta para a Terra.
PNumero X (0x1234) 10
Na linha 2, o endereo da varivel X atribudo ao ponteiro PNumero. Graficamente, a memria do programa pode ser representada como abaixo.
PNumero 0x1234 X (0x1234) 10
Slide 8
Ponteiro Tipado
Alocando Memria Dinamicamente Para alocar uma rea de memria e atribuir seu endereo a um ponteiro, pode-se utilizar o operador New. Sintaxe New(<PointerName>); Exemplo New(PNumero);
Slide 9
Ponteiro Tipado
Exemplo
No exemplo abaixo, alocado uma rea de memria cujo endereo atribudo ao ponteiro PNumero. Alm disso, atribudo o valor numrico 20 ao contedo da rea de memria.
program PonteiroTipado; var PNumero : ^Integer; begin //Alocando rea de memria New(PNumero); PNumero^ := 20; Writeln(IntToStr(PNumero^)); Readln; end.
PNumero 0x4768
(0x4768) 20
Slide 10
Ponteiro Tipado
Desalocando a Memria A rea de memria alocada com a rotina New no desalocada automaticamente pelo ambiente. Deve-se utilizar a rotina Dispose para liberar a memria alocada.
Caso contrrio, a memria ser liberada apenas quando o programa for encerrado.
Exemplo Dispose(PNumero);
Slide 11
Slide 12
Sintaxe
GetMem(<PointerName>, <Size>)
Exemplo
FreeMem(PReal);
Slide 14
Slide 15
Slide 16