ponteiros em delphi
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
sem mais
Piaum3
Curtidas 0
Respostas
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
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
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
20/09/2004
Normalmente você usa esse indicador ^ para fazer acesso direto a memória. Por exemplo:
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^.
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
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;
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
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.
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
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
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.
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
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.
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
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?
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
20/09/2004
Olá ´Beppe´,
Então como vc me sugeria para a implementação ?
Grato.
Christian.
Então como vc me sugeria para a implementação ?
Grato.
Christian.
GOSTEI 0
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:
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
20/09/2004
Sugiro o Livro: Algoritimos e Estruturas de Dados com Delphi de Julian Bucknall
GOSTEI 0