正解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
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
- 正解PPointer,Pointer
- const TYPE *pPointer、TYPE * cosnt pPointer使用举例
- pointer
- Pointer
- sb正解
- 正解TDD
- ThreadLocal 正解
- 编程正解
- 以德报怨正解
- 汇编指令ret正解
- 宏定义正解
- 存储过程正解
- 正解 -- 分月饼
- inline函数正解。
- inline函数正解
- sqlserver2000分页正解
- phpMyAdmin未能正解显示
- 浏览器event正解
- phpstorm 快捷键
- 计算机词汇大全
- myeclipse常见错误集锦 及解决方案
- window.open() POST 方式提交json数据,以及后台的json序列化为对象
- 2017.02.20回顾 gbdt+lr
- 正解PPointer,Pointer
- springSecurity应用(一)
- 例题:子类重写父类方法后的调用规则
- 这交互炸了(三):闪屏页是像云一样消失的
- 解决“从不是创建控件的线程访问它”问题。
- CS0108号错误是什么
- MAC 配置React Native开发环境
- 虚拟机centos下找不到共享文件夹
- 微信小程序自定义对话框+弹出和隐藏动画详解