ponteiros em delphi
20/09/2004
0
sem mais
Piaum3
Posts
20/09/2004
Nildo
20/09/2004
Bruno Belchior
20/09/2004
Bruno Belchior
20/09/2004
Nildo
var num: ^Integer; begin Num := Pointer( $bbbbbbbb ); ShowMessage( IntToStr( Num^ ) ); end;
Você está falando atribuindo o NUM como sendo o ponteiro da memória localizada em 0xBBBBBBBB . Toda vez que você ler esse Num^ ele vai te retornar o que há exatamente naquela localidade. E quando você for escrever algo neste local de memória, você escreve atribuindo valor ao Num^.
20/09/2004
S
identificador:^tipo;
Exemplos:
Codigo:^Integer;
Nome:^String;
Antes de usar o ponteiro você tem que armazenar memória para ele, use o seguinte comando:
New(identificador);
ou
GetMen(identicicador,memória);
E para liberar a memória do ponteiro use o seguinte comando:
Dispose(identificador);
ou
FreeMen(identificador,memória);
Nota:o parâmetro mémoria é um integer que indica a memória em bytes a ser alocada ou liberada.
Nunca atribua um valor ao ponteiro e sim para o valor que ele aponta:
Exemplo:
Codigo:^Integer;
begin
Codigo:=1; //Errado
Codigo^:=1; //Certo
Para obter um valor de uma variável use o seguinte comando:
identificador:=@variavel;
Exemplo:
Codigo:^Integer;
Valor:Integer;
begin
Codigo:=@Valor;
10/04/2005
Christian_adriano
vc pode me dá uma mão, é o seguinte, gostaria de ´Percorrer´ todo o ponteiro. Vc sabe como fazer isso ?
Em baixo vou coloca parte do meu código.
Obs. Estou usando o Pascal (Turbo Pascal).
-------------------------------------------------------------------------------------
type
{ fifo }
Apontador = ^Estados;
Estados = record
Chave: Integer;
NomeEstado: String;
Proximo: Apontador ;
end;
{ lifo }
Apont = ^Nodo;
Nodo = record
Chave: Integer;
NomeCidade: String;
Seguinte: Apont;
end ;
{ Variaveis Globais }
var
Primeiro, Ultimo: Apontador ; { controla lifo - cidades }
Topo: Apont; { controla fifo - estados}
procedure varrerLitas;
var
ptaux, Inicio : apontador ;
ptaux2 : Apont ;
begin
if (ultimo = nil) and (Topo = nil) then
Exit;
ptaux := Ultimo;
ptaux2 := Topo;
ClrScr; { limpa a tela }
WriteLn(´Listagem: ´);
WriteLn(´´);
{ Lista os Estados }
while (ptaux <> Primeiro) do
begin
Write(´Estado: ´, ptaux^.nomeestado);
WriteLn(´´);
{ Lista os Municipios de cada Estado }
while (ptaux^.Chave = ptaux2^.Chave) do
begin
write(´ Municipio: ´, ptaux2^.NomeCidade);
WriteLn(´´);
Prior(ptaux2); {volta ponteiro de Municipios ******** AKI}
end;
Prior(ptaux); {volta ponteiro de Estados - AKI TB}
end;
end;
------------------------------------------------------------------------------------
Desde já agradeço atenção.
[]´s
Christian.
10/04/2005
Beppe
procedure Prior(var Nodo: PListaEncadeada); begin if Nodo <> nil then Nodo := Nodo^.Proximo; end;
11/04/2005
Isabelct
Tem um tutorial sobre ponteiros no endereço [url]http://joaomorais.com.br/pascal/push.php?download=58594639[/url]. Aqui você vai conhecer tudo o que precisa saber sobre o funcionamento dos ponteiros.
11/04/2005
Christian_adriano
vou colocar uma parte do meu código pra c analisar se tah certo.
--------------------------------------------------------------------------------------
{ ***********/ Varrer Listas \***************}
procedure varrerListas;
var
ptaux : apontador ;
ptaux2 : Apont ;
begin
if (ultimo = nil) and (Topo = nil) then
Exit;
ptaux := Ultimo;
ptaux2 := Topo;
ClrScr; { limpa a tela }
WriteLn(´ >>>>>> Listagem <<<<<<< ´);
WriteLn(´´);
{ Lista os Estados }
while (ptaux <> Primeiro) do
begin
Write(´ -> Estado: ´, ptaux^.nomeestado);
WriteLn(´´);
{ Lista os Municipios de cada Estado }
while (ptaux^.Chave = ptaux2^.Chave) do
begin
write(´ -> Municipio: ´, ptaux2^.NomeCidade);
WriteLn(´´);
ptaux2 := ptaux2^.Seguinte; {volta ponteiro de Municipios}
end;
ptaux := ptaux^.Proximo; {volta ponteiro de Estados}
end;
ReadKey; { Pause }
end;
--------------------------------------------------------------------------------------
Grato.
[]´s.
Christian.
11/04/2005
Beppe
Primeiro, vc naum fez a checagem certa para o caso de uma das listas ser nula(vc checa, mas naum fez certo...)
Segundo, no loop interno(sobre as cidades), vc naum está checando por nil. Existe um sentinela ou algo do tipo?
11/04/2005
Christian_adriano
Então como vc me sugeria para a implementação ?
Grato.
Christian.
11/04/2005
Beppe
Eu sigo a política de não resolver trabalho de faculdade de terceiros. :wink:
Esforce-se um pouquinho e entenda a matéria. Se precisar visite o link que a Isabel te passou. :wink:
11/04/2005
Marioguedes
Clique aqui para fazer login e interagir na Comunidade :)