请大家深思一下DELPHI中的指针!不,当然我阅读了垫子部分并与他们一起工作(不完全理解他们的性质),但为什么呢?
type TMyRec = class
s:string;
n:integer;
end;
var MyRec: TMyRec;
PRec: ^TMyRec;
begin
//Но MyRec сейчас null на какую область памяти может начать ссылаться PRec?
PRec:=@MyRec;
PRec^.S:='Строка данных';//С помощью указателя производится изменение строкового поля записи
PRec^.N:=256;//С помощью указателя производится изменение числового поля записи
end;
一切都很棒,一切都很棒并且有效。但是,如果下一个条目也很好用,为什么?
var MyRec: TMyRec;
begin
MyRec:=TMyRec.Create;
MyRec.S:='Строка данных';
MyRec.N:=256;
end;
总的来说,我有很多关于指针的问题,我什至无法表达。如果能提供任何能解释为什么日常生活中需要指针的信息,我将不胜感激。
让我们停在
和
赋值前的局部变量
MyRec不是nil,而是具有任意值(垃圾)。你很幸运,因为在接下来的几行中你写入了一个任意的内存区域,而这样做的后果可能是最意想不到的。请记住,在突然访问违规 Delphi 10.1 Berlin中,我更改了您的代码
颁奖给
tryProps块外赋值这一行的意思try/finally是,如果块内出现异常getProps,finally代码将不会进入块内,也不会尝试释放未初始化的局部变量指向的内存Props。另一个正确选项:
指针的同义词是链接。
有记忆,就有对记忆的引用。当传递
TClass给过程时,指向对象的指针(引用)将被传递,而不是对象本身。当
record没有指针传递时,整块内存都会被传递给过程,而不是一个链接,也就是一个完整的结构。指针甚至在 OOP 之前就从 Pascal 继承而来,也就是说,当时还没有类。在 Pascal 中没有 TList 类型的类,为了做类似的事情,你需要围起来你的花园:
TList = record S : string; Next : pointer; prev : pointer; end; PList = ^TList也就是说,指针主要是为了更好地record与 Pascal 兼容