Fórum Dúvidas sobre ponteiros e etc... #157091
30/04/2003
0
Gostaria de saber como faço pra aprender a manusear ponteiros e estes caracteres que estarão aqui escritos:@,# ^ e etc.. Se não for incomodo, poderia pôr alguns pequenos exemplos com comentários?
muito grato...
André
muito grato...
André
Andre Raposo
Curtir tópico
+ 0
Responder
Posts
01/05/2003
Data
Olha cara, brincar com ponteiros é coisa séria, uma falha e você pode botar todo o sistema abaixo. E tem mais, os erros com ponteiros geralmente só são percebido quando o sistema cai. Mas vamos lá:
O caracter # significa que o próximo argumento, numérico, não seguido de espaço é o código de um caracter. Isto é 100 é igual ao código do caracter ´d´, assim como 60 equivale ao caracter ´<´. As seguintes associações são corretas:
var
Carac: char;
Carac := 100 // a cariável Carac tem o valor ´d´
Carac := 60 // a variável Carac tem o valor ´<´
var
MyString: string;
MyString := 1009711697 // a variável MyString tem o valor ´data´
digite Alt+código que você quer e verá o caracter que representa.
Bom, mas isso é outra história, vamos aos ponteiros
Os ponteiro podem ser declarados explicitamente com tipos.
Ex:
var MyPtrDouble: ^Double; // ponteiro para um Double
MyPtrChar: ^Char; // poneiro para um char
MyPtrInt: ^Integer; // ponteiro para um inteiro
O que significam as declarações? Que estas variáveis receberão o endereço, e indiretamente, o valor das variáveis daquele tipo.
E como posso diferenciar?
Da seguinte forma:
var
MyPtrInt: ^Integer; // ponteiro para um inteiro
MyInt: integer; // variável inteira
MyInt := 100; // a variável MyInt tem o valor 100
MyPtrInt := @MyInt; // lê-se coloque o endereço da variável MyInt em MyPtrInt
Neste ponto você poderia pensar que se acessasse a variável MyPtr você poderia encontrar o valor 100. Mas não encontraria.
É como se a variável MyInt fosse uma casa e a variável MyPtrInt fosse o mapa do caminho até a vasa. Mas se você tem o mapa você sabe chegar até a casa. Logo, o símbolo ´^´ quando não usado numa declaração, lê-se pegue o valor no endereço...
Ex:
var
MyPtrInt: ^Integer; // ponteiro para um inteiro
MyInt: integer; // variável inteira
MyIntNova: integer; // variável inteira
MyInt := 100; // a variável MyInt tem o valor 100
MyPtrInt := @MyInt; // lê-se coloque o endereço da variável MyInt em MyPtrInt
MyIntNova := MyPtrInt; // causa um erro de sintaxe
MyIntNova := MyPtrInt^; // está correto e lê-se coloque o valor que está no endereço contido em MyPtrInt em MyIntNova, logo MyIntNova agora tem o valor 100 também.
Em resumo:
MyInt := 100;
MyIntNova := MyInt; // é equivalete a
MyIntNoca := MyPtrInt^;
[b]´Ninguém sabe tão pouco que não possa ensinar. Ninguém sabe tanto que não possa aprender.´[/b]
O caracter # significa que o próximo argumento, numérico, não seguido de espaço é o código de um caracter. Isto é 100 é igual ao código do caracter ´d´, assim como 60 equivale ao caracter ´<´. As seguintes associações são corretas:
var
Carac: char;
Carac := 100 // a cariável Carac tem o valor ´d´
Carac := 60 // a variável Carac tem o valor ´<´
var
MyString: string;
MyString := 1009711697 // a variável MyString tem o valor ´data´
digite Alt+código que você quer e verá o caracter que representa.
Bom, mas isso é outra história, vamos aos ponteiros
Os ponteiro podem ser declarados explicitamente com tipos.
Ex:
var MyPtrDouble: ^Double; // ponteiro para um Double
MyPtrChar: ^Char; // poneiro para um char
MyPtrInt: ^Integer; // ponteiro para um inteiro
O que significam as declarações? Que estas variáveis receberão o endereço, e indiretamente, o valor das variáveis daquele tipo.
E como posso diferenciar?
Da seguinte forma:
var
MyPtrInt: ^Integer; // ponteiro para um inteiro
MyInt: integer; // variável inteira
MyInt := 100; // a variável MyInt tem o valor 100
MyPtrInt := @MyInt; // lê-se coloque o endereço da variável MyInt em MyPtrInt
Neste ponto você poderia pensar que se acessasse a variável MyPtr você poderia encontrar o valor 100. Mas não encontraria.
É como se a variável MyInt fosse uma casa e a variável MyPtrInt fosse o mapa do caminho até a vasa. Mas se você tem o mapa você sabe chegar até a casa. Logo, o símbolo ´^´ quando não usado numa declaração, lê-se pegue o valor no endereço...
Ex:
var
MyPtrInt: ^Integer; // ponteiro para um inteiro
MyInt: integer; // variável inteira
MyIntNova: integer; // variável inteira
MyInt := 100; // a variável MyInt tem o valor 100
MyPtrInt := @MyInt; // lê-se coloque o endereço da variável MyInt em MyPtrInt
MyIntNova := MyPtrInt; // causa um erro de sintaxe
MyIntNova := MyPtrInt^; // está correto e lê-se coloque o valor que está no endereço contido em MyPtrInt em MyIntNova, logo MyIntNova agora tem o valor 100 também.
Em resumo:
MyInt := 100;
MyIntNova := MyInt; // é equivalete a
MyIntNoca := MyPtrInt^;
[b]´Ninguém sabe tão pouco que não possa ensinar. Ninguém sabe tanto que não possa aprender.´[/b]
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)