Увеличение значения указателя
Конвертирует указатель в Cardinal, увеличиваем значение адреса, и конвертирует обратно в указатель, который и возвращает. Внимание, функция не выделяет никаких блоков памяти, она просто работает с указателем.
function IncPtr(APointer: pointer; AHowMuch: cardinal = 1): pointer;
begin //*** Конвертируем указатель в Cardinal, увеличиваем значение адреса,
//*** и конвертируем обратно в указатель, который и возвращаем.
//**! Внимание, функция не выделяет никаких блоков памяти,
//**! она просто работает с указателем.
Result := Ptr(cardinal(APointer) + AHowMuch); end; Пример использования:
{$APPTYPE CONSOLE} program testptr; uses SysUtils, uIncPtr; //*** Модуль uIncPtr содержит функцию IncPtr
var
ptr1, ptr2: pointer;
begin
ptr1 := AllocMem(255);
ptr2 := incptr(ptr1, 10);
writeln('ptr1 : ', cardinal(ptr1));
//*** Напечатать увеличенный на 10 указатель ptr1
writeln('ptr2 (+10): ', cardinal(ptr2));
FreeMem(ptr1, 255)
end. |