Мне кажется, что в начале вы использовали плохой пример, имеет смысл
использовать 32-битный указатель для 16-битной величины или распределять 10 байт
для переменной.
Pascal позволяет вам использовать методы NEW и DISPOSE, которые автоматически
распределяют и освобождают правильные размеры блока.
Например,
NEW(MyPtr) = GetMem(MyPtr, Sizeof(MyPtr))
Возможно, вы захотите подсчитать количество целочесленных переменных. В этом
случае ознакомьтесь с возможностями TList. Пока лучше используйте линейный
массив (или указатель на первый элемент, чтобы вычислить их количество,
достаточно разделить количество занимаемой массивом памяти на количество
элементов).
Для полноты, это должно быть:
NEW(MyPtr) = GetMem(MyPtr, SizeOf(MyPtr^));
SizeOf(MyPtr) всегда будет равен 4 байта, как 16-битный указатель.
Если я правильно разобрался в том, что вы хотите (динамический массив целых,
количество элеметнов которого может быть известно только во время выполнения
приложения), вы можете сделать так:
Type
pIntArr = ^IntArr;
IntArr = Array[1..1000] of Integer;
Var
MyPtr : pIntArr;
Begin
GetMem(MyPtr, 10); { 10 = SizeOf(Integer) * 5 !!)
{ MyPtr[2]:=1; }// <<<< Заполняем массив >>>>
MyPtr[2]^:=1;
FreeMem(MyPtr,10);
End;
Технология похожа на ту, которуя Delphi использует при работе с pchar.
Синтаксис очень похож:
type
intarray = array[0..20000] of integer;
procedure TForm1.Button1Click(Sender: TObject);
var
xptr: ^IntArray;
begin
GetMem(xptr, 10);
xptr^[idx] := 1; { где idx от 0 до 4, поскольку мы
имеем 10 байте = 5 целых }
FreeMem(xptr, 10);
end;
Обратите внимание на то, в вам в действительности нет необходимости распределять
массив для 20,000 элементов, но проверка диапазона Delphi не будет работать,
если диапазон равен 20,000. (Предостережение будущим пользователям!)
Если Вас заинтересовала или понравилась информация по разработке на Delph - "Использование указателей на целое", Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу: Так же Вы можете задать вопрос по работе этого модуля или примера через форму обратной связи, в сообщение обязательно указывайте название или ссылку на статью!