请教关于无类型参数 ( 积分: 100 )

  • 主题发起人 主题发起人 doglive
  • 开始时间 开始时间
D

doglive

Unregistered / Unconfirmed
GUEST, unregistred user!
Function Equal(Var source,Dest;size:Integer);Boolean;
Type TBytes=Array[0..MaxInt-1] of byte ;
var N:Integer;
begin
N:=0;
while(N<size)and(TBytes(Dest)[N]=TBytes(soures)[N])do
Inc(N);
Equal:=N=size;
end;
下面有个调用的例子:
type TVector=Array[1..10] of Integer;
Tpoint=Record
x,y:integer;
End;
var vec1 ,vec2:TVextor;
N:Integer;
P:Tpoint;
...
Equal(vec1 ,vec2,sizeof(Tvector));
Equal(vec1,vec2,sizeof(Integer)*N);
Equal(Vec[1],vec[2],sizeof(Integer)*5);
Equal(vec1910,P,4);

请问后面的四个调用分别完成什么样的功能,请说明原因,多谢
 
Function Equal(Var source,Dest;size:Integer);Boolean;
Type TBytes=Array[0..MaxInt-1] of byte ;
var N:Integer;
begin
N:=0;
while(N<size)and(TBytes(Dest)[N]=TBytes(soures)[N])do
Inc(N);
Equal:=N=size;
end;
下面有个调用的例子:
type TVector=Array[1..10] of Integer;
Tpoint=Record
x,y:integer;
End;
var vec1 ,vec2:TVextor;
N:Integer;
P:Tpoint;
...
Equal(vec1 ,vec2,sizeof(Tvector));
Equal(vec1,vec2,sizeof(Integer)*N);
Equal(Vec[1],vec[2],sizeof(Integer)*5);
Equal(vec1910,P,4);

请问后面的四个调用分别完成什么样的功能,请说明原因,多谢
 
Equal(vec1 ,vec2,sizeof(Tvector))

vec1和vec2数组内容比较,10个Integer,40字节

Equal(vec1,vec2,sizeof(Integer)*N);
vec1和vec2数组下标从1开始的N个Integer的比较,N*4字节

Equal(Vec[1],vec[2],sizeof(Integer)*5);
vec从下标1开始的5个Integer和同一个数组vec从下标2开始的5个Integer的比较,20字节

Equal(vec1910,P,4);
vec1910和P.x的比较,1个Integer,4个字节
 
(TBytes(Dest)[N]=TBytes(soures)[N])在其中数组有Tvector是怎么样向TByetes转换的?
Vec[1],vec[2]向函数传递的是一个数组中的一个元素,有怎么样向TBytes转变?
多谢!!
 
无类型参数var src;实际上可以看成src : PBYTE/PCHAR.其实就是传递了一个指针过去.不过调用形式不能用指针(因为有了var)
var pMem : Pointer;
begin
pMem = GetMemory(..);
Equal(pMem^, xx);
FreeMem(..);
end;
 
后退
顶部