Следующий пример конвертирует указатель в Cardinal, увеличиваем значение адреса, и конвертирует обратно в указатель, который и возвращает.

Внимание, функция не выделяет никаких блоков памяти, она просто работает с указателем.

Code:

Зависимости: System

Автор:       Григорий Ситнин, gregor gregor.ru, Москва

Copyright:   Григорий Ситнин, 2003

Дата:        8 июля 2003 г.

***************************************************** }

 

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.

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить