Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.22;
Скачать: CL | DM;

Вниз

Прокомментируйте, пожалуйста, код   Найти похожие ветки 

 
Udjin ©   (2003-09-02 22:02) [0]

type
TAr=array[1..1024] of byte;
Ar=^TAr;
var loop :Integer;
change : boolean;
begin
change := false;
for loop:=1 to SizeOf(r1) do
if Ar(@r1)^[Loop]<>Ar(@r2)^[loop] then
begin
change:=true;
end;
r1 и r2 некоторые записи. Эта штука их сравнивает. Хоть убейте не пойму как. Просветите плз.


 
Ерш твое имя   (2003-09-02 22:16) [1]

Просто побайтовое сравнение. Записи трактуются, как массивы байт (их приводятся к типизированным указателям), а элементы этих массивов сравниваются в цикле.

Есть недостатки. Во-первых, не хватает Break, поэтому получаем лишнюю работу. Во-вторых, в объявлении TAr лучше поставить packed (на сегодня это все равно, но на будущее лучше подстраховаться). В-третьих, надежно сработает только для packed записей. В-четвертых, не сработает для записей размером более 1024 байт. В-пятых, не сработает для записей разной длины.

А в-шестых, это делается проще и надежнее- надо сравнить размеры записей, и, если они равны, то вызвать CompareMem.


 
Ерш твое имя   (2003-09-02 22:18) [2]

Слово пропустил:
их адреса приводятся к типизированным указателям


 
Ерш твое имя   (2003-09-02 22:24) [3]

Еще добавка:
CompareMem тоже сработает только для packed записей.


 
Юрий Зотов ©   (2003-09-03 06:48) [4]

В общем, да, получилось изобретение велосипеда с квадратными колесами. Потому что то же самое (только быстрее и лучше) делает одна простая строка:
Сhange := not CompareMem(@R1, @R2, SizeOf(R1));



Страницы: 1 вся ветка

Текущий архив: 2003.09.22;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.018 c
14-71889
Карлсон
2003-09-03 18:06
2003.09.22
книга про Windows для ну совсем чайников.


1-71662
Vladislav
2003-09-08 16:44
2003.09.22
PDF viewer


14-71859
Anatoly Podgoretsky
2003-08-31 00:43
2003.09.22
Инструкция к


14-71910
Nik8.
2003-09-03 11:25
2003.09.22
Глюк Tdbgrid-a


14-71827
Сергей Суровцев
2003-09-01 02:22
2003.09.22
Корейский Боинг