我需要比較給定數組的所有項是否相同。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