![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как изменть значение указателя?
Дурдом © (2005-01-03 02:40:00)Доброй ночи!
Можно ли средствами Делфи не прибегая к инлайн-ассемблеру сделать следующее:
var
A1:array[0..$FF] of byte;
FileMapped:pointer; //указатель на кусок памяти
n:integer;
---
begin
for i:=0 to $FF do
A1[i]:=значение байта (по адресу (указателя на кусок памяти+i))
Это означает, что FileMapped указывает на некий массив байт, и надо заполнить массив A1 байтами, на которые указывает FileMapped (пододвигая значение указателя на 1 в право, но если можно по-другому - я не против).
programania (2005-01-03 02:58:00) [41]move(ptr(integer(FileMapped)+i)^,A1[i],1);
а короче
move(FileMapped^,A1,sizeOf(A1));
GuAV (2005-01-03 02:57:00) [42]Для арифметических операций с указателями их можно приводить к целочисленному 32 разрядному типу.
A1[i]:=PByte(Integer(FileMapped)+i)^
можно привести указатель к указателю на массив байтов.
A1[i]:=PByteArray(FileMapped)[i]
А ещё можно (я бы сделал имеено так) - воспользоваться Move
Move(FileMapped^, A1[Low(A1)], SizeOf(A1));