Цитата:
А что это такое:
ba:PByteArray;
p:PRGBTriple;
q:PRGBQuad;
|
это указатели на определенные типы
обычные типы и массивы не лучший пример (их легче просто присвоить), но раз просите:
Код:
type PString = ^String; //type foo = ^bar - это объявление нового типа foo как указателя на объект или переменную типа bar
...
var p, p2:PString; //объявляем переменную-указатель
Src,Dst : String; //Исходная и конечная строки
begin
//Использование динамических переменных (здесь это p)
//тут p=nil, т.е. пустому указателю
GetMem(p, Length(Src)+1); //выделяем участок памяти размером с исходную строку (включая нулевой символ) и записываем адрес этого участка в указатель
//тут p=некоторому адресу
p^:=Src; //копируем исходную строку в новую. foo^ - означает доступ к объекту/переменной, хранящейся по адресу, на который указывает foo
//вот, собственно, и все. строка скопирована и обращаться к ней надо по p^
...
FreeMem(p); //поработали со строкой - надо теперь память за собой почистить
p:=nil; //на всякий пожарный
...
//Доступ к переменной через указатель
p2:=@Src; //p2 теперь указывает на Str; @var - возвращает адрес var
p2^:='Test'; //записываем строку по адресу, на который указывает p2
//Src теперь равно 'Test';
p2:=nil; //на всякий пожарный
...
//Копирование Src -> Dst. для простых типов делать это через указатели бессмысленно и неоптимально
p:=@Dst; //p теперь указывает на Dst;
p^:=Src; //Dst теперь равна Src
p:=nil; //на всякий пожарный
end;
помимо GetMem() и FreeMem() есть еще New() и Dispose(). GetMem() выделяет кусок памяти произвольного размера и поэтому годится для нетипизированных указателей (p:Pointer) и указателей на динамические структуры - массивы, строки; New выделяет память указателю на тип с фиксированным размером - integer, float... и record
ну и лучше из какого-нибудь учебника почитать про них..попонятнее будет. вот для начала можно
http://coder.udrabota.com/stat/delphi/gl_15.1.php