正解PPointer,Pointer

来源:互联网 发布:开源php cms 编辑:程序博客网 时间:2024/05/17 23:53
VCL有这样一段代码:
    function TObject.ClassType: TClass;
    begin
       Pointer(Result) := PPointer(Self)^;
    end;

    class function TObject.ClassName: ShortString;
    begin
       Result := PShortString(PPointer(Integer(Self) + vmtClassName)^)^
    end;

    看懂了这段代码,差不多你对Delphi中的指针机制有了一定的了解。

    在讲解这段代码之前,看看下面这个问题:
       请问 PPointer(A) 和 Pointer(A) 有何异同? (A是一个指针)

    我们借着这个问题就可以理解上面的VCL代码了。 
    PPointer(A) 就是将指针A强制转化为指向指针的指针, 它还是一个指针, 不过该指针指向的对象是指    针类型。而Pointer(A) 就是讲指针A强制转化为一个无类型指针, 它也还是一个指针, 不过该指针指    向的对象是无类型的。 

    我们知道Delphi中的任一对象都是一个指针, 也就是Self指针。PPointer(Self)^的解析应当是这样    的,先将Self指针强制转化为指向指针的指针(这句话就是PPointer(Self)的意思), ^就是取 指针
    PPointer(Self)的内容。
    声明这样一个对象TObject obj1

    Self


转自:点击打开链接


0 0
原创粉丝点击