正解PPointer,Pointer

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值