Fórum Símbolos @ e ^ #269903
23/02/2005
0
Me desculpem se a dúvida é meio idiota, mas eu gostaria que alguem me explicasse de uma forma clara e objetiva pra que servem esses dois símbolos (@ e ^).
Muito Grato,
Té mais
Wart
Curtir tópico
+ 0Posts
23/02/2005
Beppe
Brincadeira, vou tentar explicar.
Existe endereço e conteúdo. Algo como o número 1 ou o caractere ´A´ é dito conteúdo, não tem como acessá-los* diretamente, precisamos de um endereço. Uma variável, por exemplo, tem um endereço, e neste endereço estará o valor que a variável representa.
O operador prefixo @ pega o endereço de uma expressão, mas nem todas as expressões tem endereço. O operador sufixo ^ é dito dereferenciar, ou melhor, o uso dele. Este operador faz o inverso, dado um endereço, recupera seu conteúdo.
Isto é válido:
@UmaVariavel // retorna um ponteiro para a variável, e não seu conteúdo
@UmaFuncao
(@UmaString[1])^
PChar(UmaString)^
UmaVariavelDoTipoPonteiro^
Isto NÃO é válido:
@1
@´a´
UmaVariavelNãoPonteiro^
UmaFuncao^
Existem casos especiais, como expressões como argumentos var, dereferenciamento automático, etc...mas isso é outra história.
* não tem MESMO
Gostei + 0
23/02/2005
Wart
blz, mais três perguntas: o que (mas o q mesmo.. num consigo nem imagina o q seja isso) seria esse endereço que é retornado?
Tem como o amigo [b:5f3dfa96d4]Beppe[/b:5f3dfa96d4] ou outra alma caridosa me dar uns 2 exemplos práticos de uso desses bixinhos??
porque quando uso @ ele me fala q é inseguro?
hehe, brigadão pela atenção...
té mais
Gostei + 0
23/02/2005
Beppe
var A: array[0..100] of Char; P: PChar; // PChar é ponteiro para Char begin P := @A[0]; // pega ponteiro para o primeiro elemento no array P^ := ´O´; // mesmo que A[0] := ´O´ P := P + 1; // avança para o próximo caractere no array P^ := ´i´; // mesmo que A[1] := ´i´ P := P + 1; // avança para o próximo caractere no array P^ := 0; // mesmo que A[2] := 0; isto termina a string Caption := A; end;
Mexer com ponteiros é sempre ´inseguro´...a partir do Delphi 7, o compilador exibe estas mensagens por compatibilidade com o .NET...dá pra desabilitar no IDE também...
Gostei + 0
24/02/2005
Tnaires
É o tipo da coisa... só mexa com ponteiros se vc souber BEM o q vc quer fazer... Em geral, ponteiros é uma coisa q a gente só aprende na faculdade ou estudando sozinho. Hmmm... alguém já encontrou necessidade d usar ponteiros desenvolvendo algum sistema comercial em Delphi?
Gostei + 0
24/02/2005
Kapak
type TData_PTR = ^TData; TData = record Dia,Mes,Ano:Word; end;
Neste caso, ^TData_PTR é um ponteiro p/ o record TData.
Existem muitos usos de ponteiro em aplicações, um típico exemplo é quando vc deseja passar alguma variável de uma dll p/ o seu .exe; vc pode fazer isso utilizando SendMessage e passar o ponteiro dessa variável através do wparam.
O * é utilizado em C/C++ como ponteiro.
Gostei + 0
24/02/2005
Beppe
Eu omite intencionalmente, mas foi bom vc ter falado nele, pra ficar mais completo.
Gostei + 0
27/02/2005
Alysson
Quanto mais memória RAM, mais o PC consegue guardar dados...
O Símbolo @ pega o endereço da memoria ram que o valor está contido....
exemplo:
Var
Int:Integer;
@Int = O Endereço da memória ram, que está o valor dentro da variável INT...
já que @ pega a posicao da memória RAM, o símbolo ^ faz referência a ela...
Valor^ := BLABLA // Você vai escrever na posicao da memória ram de endereço VALOR, os dados passados depois de :=
BlaBlaBla := Valor^ //Você pega o Valor contido na memória ram de endereço VALOR, e colocá-lo em BlaBlaBla, que tb é 1 memória RAM...
ou seja..
quando você faz atribuição de valores, você está nada menos, nada mais, do que COPIANDO blocos da memória RAM, para outra posiçÃO....
Gostei + 0
28/02/2005
Paulo_amorim
Em Delphi os ponteiros são muito menos usados que em outras linguagens, ainda mais as de nível mais baixo, como o C. Pelo tipo mais comum de aplicações do Delphi - aplicações comerciais e diretamente ligadas a bancos de dados - os ponteiros ficam em segundo plano.
Como disse o tnaires, não é bom mexer com ponteiros se não tem um bom motivo, pois ao mexer diretametne com a memória vc perde a ´proteção´ do alto nível que o Delphi oferece...
Até+
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)