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é


Andre Raposo

Andre Raposo

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]


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar