PInteger это
- Код: Выделить всё
type
PInteger = ^Integer;
т.е. указатель на тип Integer. Для каждого
простого есть подобные определения.
Типы String и записи к простым типам не относятся.
Для чтения записи переменных типа String:
Запись: подразумевается, что область данных уже выделена
- Код: Выделить всё
Move(S[1],P^,Length(S)); // S - строка, а P - указатель на заранее выделенный блок памяти
Чтение
- Код: Выделить всё
SetLength(S,Size); // Size - размер читаемого блока
Move(P^,S1[1],Size); // P - указатель на память. S - строка
Для работы непосредственно с записями
- Код: Выделить всё
type
PTestRecord = ^TTestRecord;
TTestRecord = packed record
item: Integer;
...
end;
.....
// Запись
PTestRecord(P)^.item:=1;
// Чтение
i:=PTestRecord(P)^.item;
или
- Код: Выделить всё
var
Rec: TTestRecord;
...
Move(Rec,P^,SizeOf(Rec)); // копируем из Rec в P^
Классы и объекты по своей сути являются указателями на области памяти с определённой структурой. Т.е. в блок памяти можно сохранить указатель на класс, а не сам класс.
- Код: Выделить всё
TMyClass(P+15).Method()
Добавлено спустя 4 минуты:С массивами особых проблем нет.
1 способ:
- Код: Выделить всё
type
arr = array[0..15] of Integer;
parr = ^arr;
....
Parr(P+12)^[5]:=1;
2 способ простое копирование:
- Код: Выделить всё
var arr: array[0..15] of Integer;
....
Move((P+12)^,arr[0],SizeOf(arr));