======================================================
注:本文源代码点此下载
======================================================
在 tiburon
更早的版本中,并不是所有的指针类型都支持指针运算。因为这样,为了让无类型指针也支持指针运算,许多代码都将其转化成 pchar
操作。现在,可以使用 tiburon 中的新编译条件 {$pointermath}
来指示编译器允许指针运算,特别是允许 pbyte 的指针运算。{$pointermath on/off}
可以打开/禁止对任意指针变量的运算,增减指针实际操作的是指针元素的大小。
下面的例子是一个将某类型指针转换成 pchar 后的指针运算:
function tcustomvirtualstringtree.internaldata(node: pvirtualnode):
pointer;
begin
if (node = froot) or (node = nil) then
result :=
nil
else
result :=
pchar(node) + finternaldataoffset;
end;
您应该将其修改成 pbyte 而不是 pchar:
function tcustomvirtualstringtree.internaldata(node: pvirtualnode):
pointer;
begin
if (node = froot) or (node = nil) then
result :=
nil
else
result :=
pbyte(node)
+
finternaldataoffset;
end;
在上面的例子中,node 真实的数据不是 pchar 的数据。将其强制转换成 pchar
的操作在早先的版本中是正常的,因为早先版本中
sizeof(char)
== sizeof(byte)。但是现在不同了,所以这样的代码必须从 pchar 改换成 pbyte。如果不做这样的更改,返回的
pointer 将指向错误的数据。
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
在Tiburon更新后,支持了更多类型的指针运算。通过编译条件{$pointermath}
777

被折叠的 条评论
为什么被折叠?



