求delphi中的指针问题?

procedureReverseCardinal(p:Pointer);vartb1,tb2,tb3,tb4:Byte;begintb1:=pByte(p)^;tb2:=... procedure ReverseCardinal(p:Pointer);
var
tb1,tb2,tb3,tb4:Byte;
begin
tb1:=pByte(p)^;
tb2:=pByte(Ptr(Cardinal(p)+1))^;
tb3:=pByte(Ptr(Cardinal(p)+2))^;
tb4:=pByte(Ptr(Cardinal(p)+3))^;
pByte(p)^:=tb4;
pByte(Ptr(Cardinal(p)+1))^:=tb3;
pByte(Ptr(Cardinal(p)+2))^:=tb2;
pByte(Ptr(Cardinal(p)+3))^:=tb1;
这段代码里P:Pointer,pByte,Cardinal可以直接用吗?它们好像不是关键字啊
这段代码啥意思
展开
 我来答
ototing
2010-05-11 · TA获得超过821个赞
知道小有建树答主
回答量:352
采纳率:0%
帮助的人:469万
展开全部
编译通得过,Pointer,pByte,Cardinal都可以直接用,p开头的一般是一些指针类。
p:Pointer :定义P为一般性通用的指针,可以作为任何类型数据的指针

tb1:=pByte(p)^;把p强制转换为字节指针(它所指向的数据仅占一个字节),并把指针地址所指向的内容(Byte类型)传给tb1
tb2:=pByte(Ptr(Cardinal(p)+1))^;把P指针的地址转换为一个无符号整数,并且把这个整数加1,然后再转换为指针,再转换为字节指针,再把内容传给tb2
tb3:=pByte(Ptr(Cardinal(p)+2))^;原理同上
tb4:=pByte(Ptr(Cardinal(p)+3))^;
pByte(p)^:=tb4;把p强制转换为字节指针,并把指针地址所指向的地方放入TB4
pByte(Ptr(Cardinal(p)+1))^:=tb3;原理同上
pByte(Ptr(Cardinal(p)+2))^:=tb2;
pByte(Ptr(Cardinal(p)+3))^:=tb1;

整个句子看下来,就是把P所指向连续四个字节的内存信息内容刚好反转过来,
比如:
地址:数据
[p+0]:0A
[p+1]:0B
[p+2]:0C
[p+3]:0D
现在:
[p+0]:0D
[p+1]:0C
[p+2]:0B
[p+3]:0A
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式