#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);