Para que serve o @ nos códigos Delphi
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
Agradeço, Koch
Mkoch
Curtidas 0
Melhor post
Daemon
21/07/2005
O que o caro amigo Beppe quer dizer, é que:
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´:
...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´ :
...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
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
GOSTEI 1
Mais Respostas
Massuda
19/07/2005
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.
GOSTEI 0
Mkoch
19/07/2005
Não querendo abusar, mas poderias dar um exemplo de como utilizar e quando seria necessário ou útil utilizar esta técnica.
GOSTEI 0
Daemon
19/07/2005
...eu criei uma função que faz alguma coisa com um DataSet:
...ai eu faço uso dela:
..ou seja.. ..assim eu consigo manipular o mesmo 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...
GOSTEI 0
Daemon
19/07/2005
.....esqueci de uma linha. .rs. .:
...flws..
type pDataSet = ^TDataSet;
...flws..
GOSTEI 0
Mkoch
19/07/2005
OK, ainda não entendi direito, mas agradeço pela ajuda.
GOSTEI 0
Daemon
19/07/2005
..pergunta. .r.s ...o que você ficou em duvida? ...foi o que faz???
GOSTEI 0
Mkoch
19/07/2005
Quem é este carra ´^´ na expressão ´^TDataSet;´
e porque quando o declara ele está na esquerda e quando o usa está na direita ´pdsTemp^;´
e porque quando o declara ele está na esquerda e quando o usa está na direita ´pdsTemp^;´
GOSTEI 0
Beppe
19/07/2005
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.
GOSTEI 0
Mkoch
19/07/2005
Legal, agradeço pela ajuda galera.
GOSTEI 0
Atma Ltda
19/07/2005
O que o caro amigo Beppe quer dizer, é que:
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´:
...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´ :
...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
type pDataSet = ^TDataSet;
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´:
DataSet := pdsTemp^;
...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´ :
if DataSetEmUso(@DmPrin.dsTabela.DataSet) then
...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
GOSTEI 0