Сначала вы должны создать тип:

Code:

Type Pinteger : ^Integer;

 

Var MyPtr : Pinteger;

 Мне кажется, что в начале вы использовали плохой пример, имеет смысл использовать 32-битный указатель для 16-битной величины или распределять 10 байт для переменной. 

 Pascal позволяет вам использовать методы NEW и DISPOSE, которые автоматически распределяют и освобождают правильные размеры блока. 

 Например:

 

 

Code:

NEW(MyPtr) = GetMem(MyPtr, Sizeof(MyPtr))

 

Возможно, вы захотите подсчитать количество целочесленных переменных. В этом случае ознакомьтесь с возможностями TList. Пока лучше используйте линейный массив (или указатель на первый элемент, чтобы вычислить их количество, достаточно разделить количество занимаемой массивом памяти на количество элементов).

 

Для полноты, это должно быть:

 

Code:

NEW(MyPtr) = GetMem(MyPtr, SizeOf(MyPtr^));

 

SizeOf(MyPtr) всегда будет равен 4 байта, как 16-битный указатель.

 

Если я правильно разобрался в том, что вы хотите (динамический массив целых, количество элеметнов которого может быть известно только во время выполнения приложения), вы можете сделать так:

 

Code:

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. Синтаксис очень похож:

 

Code:

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. (Предостережение будущим пользователям!)

 

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

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

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

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


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