var
Pi:Pointer;
A,B:Integer;
begin
A:=1;B:=2;
Pi:=@B;
A:=Integer(Pi^);
ShowMessage(IntToStr(A));
end;
参看帮助中关于Pointer这一节,说But a Pointer variable cannot be dereferenced; placing the ^ symbol after a Pointer variable causes a compilation error.即无类型指针是不能解除引用的,但为什么上述代码能正确编译并得到正确答案呢?
Pi:Pointer;
A,B:Integer;
begin
A:=1;B:=2;
Pi:=@B;
A:=Integer(Pi^);
ShowMessage(IntToStr(A));
end;
参看帮助中关于Pointer这一节,说But a Pointer variable cannot be dereferenced; placing the ^ symbol after a Pointer variable causes a compilation error.即无类型指针是不能解除引用的,但为什么上述代码能正确编译并得到正确答案呢?
解决方案 »
- delphi判断点是否在多边形内
- 全文检索检索到的文件怎么打不开呀?
- db数据库中如何显示韩文?
- 有使用cxLookupComboBox经验的进来看看
- 熟悉IC卡的朋友请进
- DEPHI IDE的几个小问题
- □□升为4个角,散分!同时祝大家愚人节快乐□□
- 第一次操作报表可以正常显示,,进行另一次选择操作的时候,就没有数据显示出来了,怎么回事?在线等待!!!!急
- [SQL Server]Divide by Zero error encountered????
- 求助,关于DSPACK 的视频截取,急急!!!
- 免费的delphi代码,书籍下载 www.myqihang.com
- 请教ListView中CheckBox的两个问题
http://topic.csdn.net/u/20090303/21/f2a3f61a-2906-47af-a40e-1cc4e8065ab1.html由于Pointer(AVar)^是没有类型的,不包含任何关于宽度的信息,所以当试图对其指向的地址直接进行不包含任何长度信息的读写的时候,编译器会无法确定宽度,才出现错误。Pointer(AVar)^的用法本身还是很常见的,比如
var p: Pointer;
...
Integer(p^) := 0;
这样的语法完全是可以的,因为Integer已经给了关于变量宽度的信息。