Delphi-Help

  • Increase font size
  • Default font size
  • Decrease font size
Главная

Использование указателей на целое

Оцените материал
(0 голосов)

Использование указателей на целое

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

Type Pinteger : ^Integer;
 
Var MyPtr : Pinteger;

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

Прочитано 2480 раз
Авторизуйтесь, чтобы получить возможность оставлять комментарии

срочный выкуп автомобилей

Авторизация



Счетчики