ponteiros em delphi

20/09/2004

0

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

Responder

Posts

20/09/2004

Nildo

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


Responder

20/09/2004

Bruno Belchior

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.


Responder

20/09/2004

Bruno Belchior

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.


Responder

20/09/2004

Nildo

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


Responder

20/09/2004

S

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;


Responder

10/04/2005

Christian_adriano

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.


Responder

10/04/2005

Beppe

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;



Responder

11/04/2005

Isabelct

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.


Responder

11/04/2005

Christian_adriano

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.


Responder

11/04/2005

Beppe

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?


Responder

11/04/2005

Christian_adriano

Olá ´Beppe´,

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


Grato.


Christian.


Responder

11/04/2005

Beppe

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:


Responder

11/04/2005

Marioguedes

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


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar