我需要比较给定数组的所有项是否相同。CompareMem适合比较两个数组是否相等?
现在,我有以下代码:
Type
TD = array [0..1] of TDateTime;
var A: TD;
B: TD;
begin
A[0] := Date-1; A[1] := Date+1;
B[0] := Date-1; B[1] := Date+1;
if CompareMem(@A, @B, SizeOf(TD)) then
Showmessage('Equals')
else
Showmessage('Differ');
这是工作正常,但作为CompareMem是用汇编我不能(还)要了解它做什么。
CompareMem是一种有效的方式来做我想做的事吗?另外,我想知道,如果将工作的每一个数据类型,如字符串,整数等
使用CompareMem只能使用简单的数据类型。如果数据是托管类型的,比如对象,字符串,动态数组等,那么您只是比较指针值。 –
一般答案是** no **,因为数组元素可能[align](http://docwiki.embarcadero.com/RADStudio/XE4/en/Align_fields_%28Delphi%29)。然而,如果你打算永远留在Borland编译器和Intel架构中,你可以安全地做到这一点(这是因为Borland阵列隐式地被封装)。 – OnTheFly