Главная страница
    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.44 MB
Время: 0.01 c
1-71736
AlexUh
2003-09-10 12:33
2003.09.22
Пункт меню (доступен/недоступен)


7-71988
SZap
2003-07-09 18:38
2003.09.22
Работа с LPT портом


3-71463
koks
2003-09-01 15:02
2003.09.22
упаковка Access - базы...


7-71969
RDA
2003-07-09 16:03
2003.09.22
Печать на матричный принтер


1-71748
begemot
2003-09-07 22:39
2003.09.22
Combobox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский