ponteiros em delphi

Delphi

20/09/2004

como eu faço para declarar e utilizar ponteiros em delphi,caso alguém tenha um material legal que possa me envia piaum3@yahoo.com.br caso queira respostar e postar no fórum pode ser também.

sem mais


Piaum3

Piaum3

Curtidas 0

Respostas

Nildo

Nildo

20/09/2004

Isso é um assunto muito longo. Eu acho melhor você nos dizer sua necessidade para que possamos ajudá-lo.


GOSTEI 0
Bruno Belchior

Bruno Belchior

20/09/2004

amigo como o colega acima disse é um assunto complexo e com pouca utilizada na prática no mundo ´Delphi´ é mais ultilizado por C e C++, mas só uma prévia a decalaração é da mesma forma que uma variável porém prescedida do símbolo ^ ex: var i:^integer; ele cria um ponteiro de inteiro para trabalhar com sua posição na memóra basta trabalhar simplesmente com o i, mas para acessar o conteúdo dele (variável Dinâmica) ultiliza-se o nome da variável (no caso i) e depois o mesmo símbolo ^, ex.: Edit1.Text := IntToStr(^i); se interessar me mande seu e-mail q te mando um trabalho de Faculdade meu sobre o assunto totalmente feito em Delphi, mas como já disse p/ Delphi não vejo necessidade de ponteiro (salvo casos extremos)... espero ter ajudado.


GOSTEI 0
Bruno Belchior

Bruno Belchior

20/09/2004

amigo como o colega acima disse é um assunto complexo e com pouca utilizada na prática no mundo ´Delphi´ é mais ultilizado por C e C++, mas só uma prévia a decalaração é da mesma forma que uma variável porém prescedida do símbolo ^ ex: var i:^integer; ele cria um ponteiro de inteiro para trabalhar com sua posição na memóra basta trabalhar simplesmente com o i, mas para acessar o conteúdo dele (variável Dinâmica) ultiliza-se o nome da variável (no caso i) e depois o mesmo símbolo ^, ex.: Edit1.Text := IntToStr(^i); se interessar me mande seu e-mail q te mando um trabalho de Faculdade meu sobre o assunto totalmente feito em Delphi, mas como já disse p/ Delphi não vejo necessidade de ponteiro (salvo casos extremos)... espero ter ajudado.


GOSTEI 0
Nildo

Nildo

20/09/2004

Normalmente você usa esse indicador ^ para fazer acesso direto a memória. Por exemplo:

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^.


GOSTEI 0
S

S

20/09/2004

Para declarar um ponteiro é simples:

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;


GOSTEI 0
Christian_adriano

Christian_adriano

20/09/2004

Olá Amigo ´S´,

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.


GOSTEI 0
Beppe

Beppe

20/09/2004

Vc quer a implementação de ´Prior´? Seguir o próximo elemento é simples.

procedure Prior(var Nodo: PListaEncadeada);
begin
  if Nodo <> nil then
    Nodo := Nodo^.Proximo;
end;



GOSTEI 0
Isabelct

Isabelct

20/09/2004

Olá,

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.


GOSTEI 0
Christian_adriano

Christian_adriano

20/09/2004

Olá colega ´Beep´, naum deu muito certo...
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.


GOSTEI 0
Beppe

Beppe

20/09/2004

Pelo que eu percebi, Ultimo(uma fifo) aponta para uma lista de estados e Topo(uma lifo) é uma lista de cidades. Vc precisa separar as cidades por estado, correto?

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?


GOSTEI 0
Christian_adriano

Christian_adriano

20/09/2004

Olá ´Beppe´,

Então como vc me sugeria para a implementação ?


Grato.


Christian.


GOSTEI 0
Beppe

Beppe

20/09/2004

Oi.

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:


GOSTEI 0
Marioguedes

Marioguedes

20/09/2004

Sugiro o Livro: Algoritimos e Estruturas de Dados com Delphi de Julian Bucknall


GOSTEI 0
POSTAR