主题:帮忙分析一行语句,我一直看不懂,希望句子的主人或看的懂的帮忙分析下
xiaotian9
[专家分:60] 发布于 2007-09-09 20:13:00
if CompareMem(@A[Low(A)], @B[Low(B)], Length(A)) then
···;
@A[Low(A)]
这个,按我的理解,似乎可以分为两个部分:@A和Low(A)
不知道有没有分错?
如果没分错,该怎么理解?
回复列表 (共2个回复)
沙发
长尾兔 [专家分:3630] 发布于 2007-09-09 20:56:00
哦,我是“句子的主人”。http://www.programfan.com/club/post-249123.html
CompareMem函数的原型是:
function CompareMem(P1, P2: Pointer; Length: Integer): Boolean; assembler;
也就是说,第一、二个参数是两个起始地址,第三个参数是连续的字节数。
这个函数用于比较从P1开始Length个字节的内存块,与从P2开始Length个字节的内存块,如果两个内存块内容相同,则返回True,否则返回False
CompareMem(@A[Low(A)], @B[Low(B)], Length(A)*SizeOf(Integer))
在向你提供这段代码的原贴里,是比较两个数组的所有元素是否一一对应相同。
Low(A)其实就是返回数组A最小的元素下标值,在原贴里,其值为0。
这样,@A[Low(A)]就等效于 @A[0]。
@A[0]的意思就是数组A第一个元素的地址。
Length(A)*SizeOf(Integer) 这个式子的返回值是 数组元素数 乘以 每元素的字节数
Integer型在Win32里占据4字节空间,所以 这个式子就等于 Length(A) * 4
在原贴里,
CompareMem(@A[Low(A)], @B[Low(B)], Length(A)*SizeOf(Integer))
就等效于
CompareMem(@A[0], @B[0], 8 * 4)
当然,在实际编程中,不建议CompareMem(@A[0], @B[0], 8 * 4)这样写。
这样解释,能够理解了吗?
:)
板凳
xiaotian9 [专家分:60] 发布于 2007-09-09 21:05:00
谢谢啊~你的解释很仔细,实在是太完美了,我一看就懂~
[em4]
我来回复