求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可以直接用吗?它们好像不是关键字啊
这段代码啥意思 展开
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可以直接用吗?它们好像不是关键字啊
这段代码啥意思 展开
1个回答
展开全部
编译通得过,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
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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询