Delphi — преобразование целого числа в типизированный указатель?

#delphi #pointers #syntax #delphi-7

#delphi #указатели #синтаксис #delphi-7

Вопрос:

У меня возникли некоторые проблемы с синтаксисом Delphi.

У меня есть запись:

 type
  TMyType = record
    ....
  end;
  

и процедура:

 procedure Foo(bar:Integer);
var
  ptr : ^TMyType
begin
  ptr := bar //how to do this?
end;
  

Как мне правильно преобразовать целое число в указатель TMyType?

Ответ №1:

Вот так:

 type
  PMyType = ^TMyType;

procedure Foo(bar: Integer);
var
  ptr: PMyType;
begin
  ptr := PMyType(bar);
end;
  

Комментарии:

1. Ах, я не был уверен, что потребуется новый тип. Я подумал, что это похоже на C, где «typecasts» являются чисто необязательными

2. @Earlz приведения типов не являются необязательными в C. Вам нужно будет выполнить приведение, чтобы присвоить целое число переменной указателя в C.

3. Pascal object — это строго типизированный язык, поэтому приведения обязательны для разных типов.

4. @TridenT C также строго типизирован. И на самом деле C и Delphi похожи в том смысле, что любой указатель совместим с присваиванием void* / Pointer .

5. Обратите внимание, что это не удастся в Win64, потому что там тип указателя 64-разрядный, а целое число по-прежнему 32-разрядное

Ответ №2:

Вы должны явно привести его к новому типу:

   type PMyType = ^TMyType;

  ptr := PMyType(bar);
  

или

   ptr := pointer(bar);