Para que serve o @ nos códigos Delphi

19/07/2005

0

Acho que serve para ponteiro de memória, mas alguém poderia explicar como e quando deveria utilizar o @ nas variáveis, etc.
Agradeço, Koch


Mkoch

Mkoch

Responder

Post mais votado

21/07/2005

O que o caro amigo Beppe quer dizer, é que:
type
  pDataSet = ^TDataSet;



quer dizer que quando eu passo [b:e0bfd50a0d]^TDataSet[/b:e0bfd50a0d] para [b:e0bfd50a0d]pDataSet[/b:e0bfd50a0d] eu quero dizer que [b:e0bfd50a0d]pDataSet[/b:e0bfd50a0d], vai guardar o endereço de um [b:e0bfd50a0d]TDataSet[/b:e0bfd50a0d], tipo [b:e0bfd50a0d]Av. Paulista, 115 1o. andar[/b:e0bfd50a0d] ...rs. ...no caso do computador ex: [b:e0bfd50a0d]$F2AE2200[/b:e0bfd50a0d] ...

..quando eu passo ´pdsTemp[b:e0bfd50a0d]^[/b:e0bfd50a0d]´ para a minha variável ´DataSet´:
   DataSet := pdsTemp^; 

...eu estou passando o [b:e0bfd50a0d]CONTEÚDO[/b:e0bfd50a0d] do endereço que está em [b:e0bfd50a0d]pdsTemp^[/b:e0bfd50a0d], ou seja, na [b:e0bfd50a0d]Av. Paulista, 115 1o. andar[/b:e0bfd50a0d] tem o predio da Impacta, no caso do Delphi, seria o [b:e0bfd50a0d]DataSet[/b:e0bfd50a0d] que tem naquele endereço....

...quando eu passo [b:e0bfd50a0d]@DmPrin.dsTabela.DataSet[/b:e0bfd50a0d] para a minha função ´DataSetEmUso´ :
if DataSetEmUso(@DmPrin.dsTabela.DataSet) then


...eu estou passando o [b:e0bfd50a0d]ENDEREÇO[/b:e0bfd50a0d] de memoria do [b:e0bfd50a0d]DataSet[/b:e0bfd50a0d] ´DmPrin.dsTabela.DataSet´, ou seja, [b:e0bfd50a0d]Av. Paulista, 115 1o. andar[/b:e0bfd50a0d]...

...ou seja, quando eu falo que uma variável [b:e0bfd50a0d]A[/b:e0bfd50a0d] vai ser [b:e0bfd50a0d]^Uma_Classe_Qualquer[/b:e0bfd50a0d] eu quero dizer que a var [b:e0bfd50a0d]A[/b:e0bfd50a0d]
var guardar endereços daquela classe...

..quando eu falo que variável B recebe @Variavel C, @ ( at) serve para passar o endereço, ou seja, @mkoch vai passar seu endereço ....

..e Variável^ vai passar o que tem naquele endereço, exemplo se Var A recebe @mkoch ....então [b:e0bfd50a0d]A^ = @mkoch[/b:e0bfd50a0d]. ..

...espero que tenha ficado claro para vc.....
...qualquer coisa, estamos ai.. .
....flws


Daemon

Daemon
Responder

Mais Posts

19/07/2005

Massuda

Você pode interpretar o @ como sendo um operador que retorna o endereço de uma variável e normalmente é usado para inicializar o valor de ponteiros.


Responder

19/07/2005

Mkoch

Não querendo abusar, mas poderias dar um exemplo de como utilizar e quando seria necessário ou útil utilizar esta técnica.


Responder

19/07/2005

Daemon

...eu criei uma função que faz alguma coisa com um DataSet:

 function DataSetEmUso(pdsTemp: pDataSet):boolean;
  var
    DataSet: TDataSet;
  begin
   DataSet := pdsTemp^;

    result := (DataSet.State in [dsInsert, dsEdit]);
    if result then
    begin
      DataSet.Cancel;
      ...
      ...
    end;

  end;


...ai eu faço uso dela:

if DataSetEmUso(@DmPrin.dsTabela.DataSet) then


..ou seja.. ..assim eu consigo manipular o mesmo DataSet...


Responder

19/07/2005

Daemon

.....esqueci de uma linha. .rs. .:

type
  pDataSet = ^TDataSet;


...flws..


Responder

19/07/2005

Mkoch

OK, ainda não entendi direito, mas agradeço pela ajuda.


Responder

19/07/2005

Daemon

..pergunta. .r.s ...o que você ficou em duvida? ...foi o que faz???


Responder

19/07/2005

Mkoch

Quem é este carra ´^´ na expressão ´^TDataSet;´
e porque quando o declara ele está na esquerda e quando o usa está na direita ´pdsTemp^;´


Responder

19/07/2005

Beppe

O [i:e945760ffb]caret[/i:e945760ffb] (^) numa declaração de variável ou tipo indica que será um ponteiro para um objeto do tipo que o segue. Na hora de usar(quando aparece na direita) em uma expressão, o valor do ponteiro é dereferênciado para obter um outro valor contido na memória apontada pelo ponteiro.


Responder

21/09/2005

Mkoch

Legal, agradeço pela ajuda galera.


Responder

14/02/2020

Atma Ltda

O que o caro amigo Beppe quer dizer, é que:
[code:1:e0bfd50a0d]
type
pDataSet = ^TDataSet;[/code:1:e0bfd50a0d]


quer dizer que quando eu passo <b>^TDataSet</b> para <b>pDataSet</b> eu quero dizer que <b>pDataSet</b>, vai guardar o endereço de um <b>TDataSet</b>, tipo <b>Av. Paulista, 115 1o. andar</b> ...rs. ...no caso do computador ex: <b>$F2AE2200</b> ...

..quando eu passo ´pdsTemp<b>^</b>´ para a minha variável ´DataSet´:
[code:1:e0bfd50a0d] DataSet := pdsTemp^; [/code:1:e0bfd50a0d]
...eu estou passando o <b>CONTEÚDO</b> do endereço que está em <b>pdsTemp^</b>, ou seja, na <b>Av. Paulista, 115 1o. andar</b> tem o predio da Impacta, no caso do Delphi, seria o <b>DataSet</b> que tem naquele endereço....

...quando eu passo <b>@DmPrin.dsTabela.DataSet</b> para a minha função ´DataSetEmUso´ :
[code:1:e0bfd50a0d]if DataSetEmUso(@DmPrin.dsTabela.DataSet) then[/code:1:e0bfd50a0d]

...eu estou passando o <b>ENDEREÇO</b> de memoria do <b>DataSet</b> ´DmPrin.dsTabela.DataSet´, ou seja, <b>Av. Paulista, 115 1o. andar</b>...

...ou seja, quando eu falo que uma variável <b>A</b> vai ser <b>^Uma_Classe_Qualquer</b> eu quero dizer que a var <b>A</b>
var guardar endereços daquela classe...

..quando eu falo que variável B recebe @Variavel C, @ ( at) serve para passar o endereço, ou seja, @mkoch vai passar seu endereço ....

..e Variável^ vai passar o que tem naquele endereço, exemplo se Var A recebe @mkoch ....então <b>A^ = @mkoch</b>. ..

...espero que tenha ficado claro para vc.....
...qualquer coisa, estamos ai.. .
....flws



Me ajudou quase 15 anos depois kkkk
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