PASCAL Regis Pires Magalhães Última atualização em 05/09/2007 Alocação Dinâmica Ponteiros
Alocação dinâmica Usada sempre que não se sabe exatamente quanto de memória será usado para uma determinada tarefa. Assim, reserva-se espaço da memória disponível (HEAP) à medida que mais memória torna-se necessária.  Também pode-se liberar posições de memória quando não forem mais necessárias. A memória é alocada não no início do programa, mas sim no decorrer de sua utilização do sistema. É como se pudéssemos definir um ARRAY com o seu tamanho sendo alterado à medida que fosse necessário.
Exemplo program usa_ponteiros; Uses Crt; var pInt : ^integer; begin ClrScr; New(pInt); pInt^ := 10; Writeln('pInt^: ', pInt^); Dispose(pInt); Readkey; end.
Exemplo program usa_sem_ponteiro; Uses Crt; var a, b : integer; begin ClrScr; b := a; b := 10; Writeln('a: ', a); Writeln('b: ', b); a := 20; Writeln('a: ', a); Writeln('b: ', b); Readkey; end.
Exemplo program usa_ponteiros2; Uses Crt; var pA, pB : ^integer; begin ClrScr; new(pA); pB := pA; pB^ := 10; Writeln('pA^: ', pA^); Writeln('pB^: ', pB^); pA^ := 20; Writeln('pA^: ', pA^); Writeln('pB^: ', pB^); Dispose(pA); Readkey; end.
Lista Encadeada Simples
Lista Encadeada Simples
Lista Encadeada Simples program nomes; uses crt; type tpRegistro = ^registro; registro = Record nome  : String; proximo : tpRegistro; end; var pAtual, pInicio, pAnterior : tpRegistro; mais : char; begin clrscr; repeat write('Digite um nome: '); new(pAtual); readln(pAtual^.nome); if pInicio = NIL then pInicio := pAtual; if pAnterior <> NIL then pAnterior^.proximo := pAtual; pAnterior := pAtual; write('Insere mais (S/N)? '); mais := upcase(readkey); writeln; until mais = 'N'; pAtual := pInicio; while pAtual <> NIL do begin writeln('Nome: ', pAtual^.nome); pAtual := pAtual^.proximo; end; readkey; end.

Pascal Ponteiros

  • 1.
    PASCAL Regis PiresMagalhães Última atualização em 05/09/2007 Alocação Dinâmica Ponteiros
  • 2.
    Alocação dinâmica Usadasempre que não se sabe exatamente quanto de memória será usado para uma determinada tarefa. Assim, reserva-se espaço da memória disponível (HEAP) à medida que mais memória torna-se necessária. Também pode-se liberar posições de memória quando não forem mais necessárias. A memória é alocada não no início do programa, mas sim no decorrer de sua utilização do sistema. É como se pudéssemos definir um ARRAY com o seu tamanho sendo alterado à medida que fosse necessário.
  • 3.
    Exemplo program usa_ponteiros;Uses Crt; var pInt : ^integer; begin ClrScr; New(pInt); pInt^ := 10; Writeln('pInt^: ', pInt^); Dispose(pInt); Readkey; end.
  • 4.
    Exemplo program usa_sem_ponteiro;Uses Crt; var a, b : integer; begin ClrScr; b := a; b := 10; Writeln('a: ', a); Writeln('b: ', b); a := 20; Writeln('a: ', a); Writeln('b: ', b); Readkey; end.
  • 5.
    Exemplo program usa_ponteiros2;Uses Crt; var pA, pB : ^integer; begin ClrScr; new(pA); pB := pA; pB^ := 10; Writeln('pA^: ', pA^); Writeln('pB^: ', pB^); pA^ := 20; Writeln('pA^: ', pA^); Writeln('pB^: ', pB^); Dispose(pA); Readkey; end.
  • 6.
  • 7.
  • 8.
    Lista Encadeada Simplesprogram nomes; uses crt; type tpRegistro = ^registro; registro = Record nome : String; proximo : tpRegistro; end; var pAtual, pInicio, pAnterior : tpRegistro; mais : char; begin clrscr; repeat write('Digite um nome: '); new(pAtual); readln(pAtual^.nome); if pInicio = NIL then pInicio := pAtual; if pAnterior <> NIL then pAnterior^.proximo := pAtual; pAnterior := pAtual; write('Insere mais (S/N)? '); mais := upcase(readkey); writeln; until mais = 'N'; pAtual := pInicio; while pAtual <> NIL do begin writeln('Nome: ', pAtual^.nome); pAtual := pAtual^.proximo; end; readkey; end.