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

Вниз

Динамический array of record в памяти как располагается ?   Найти похожие ветки 

 
Аккум   (2005-02-08 06:56) [0]

Последовательно рекорд за рекордом, или как попало ?


 
Skier ©   (2005-02-08 06:57) [1]

Последовательно


 
Аккум   (2005-02-08 07:19) [2]


type
 THLight2 = record        
   ID   : array [0.. 3] of Char;
   Size : Integer;              
   Name : array [0..19] of Char;
 end;                          

var
 HL3 : array of THLight2;


Я могу сделать ? :
SetLength(HL3, 10);
Move(AAl.HR3, HR3, SizeOf(THLight2)*10);


 
MBo ©   (2005-02-08 08:12) [3]

что за переменные в Move используются, непонятно ;)
Move записей в динамическом массиве делать можно, только с учетом того, нет ли в записях динамических полей (строк, дин. массивов) и применением правильного синтаксиса.


 
Чапаев ©   (2005-02-08 09:41) [4]

Хм... Насколько я знаю, в таком случае надо указывать не Move(A,...), а Move(A[0],...).


 
icWasya ©   (2005-02-08 09:49) [5]

И ещё.
В случае со статическими массивами, например  

Var
 HL2 : Array[0..9] of THLight2;

для Move нет разницы между HL2 и HL2[0] и оператор

Move(Source, HR2, SizeOf(THLight2)*10); // 1

действительно перепишет Source в массив HR2. Тоже самое сделает оператор

Move(Source, HR2[0], SizeOf(THLight2)*10); // 2

А в случае с динамическим массивом

Var
 HL3 : Array  of THLight2;
...
SetLength(HL3, 10);


операторы

Move(Source, HR3, SizeOf(THLight2)*10); // 3

и

Move(Source, HR3[0], SizeOf(THLight2)*10); // 4

сделают совсем разные вещи. Оператор 4 сделает то, чего Вы от него ожидали, а оператор 3 в лучшем случае приведёт к Access violation. Поэтому общая рекомендация - в процедуры, требуюцие бестиповые переменные, массивы (и строки) лучше передавать в виде 2 и 4.


 
Аккум   (2005-02-09 01:17) [6]


> Чапаев ©   (08.02.05 09:41) [4]
> Хм... Насколько я знаю, в таком случае надо указывать не
> Move(A,...), а Move(A[0],...).

Правильно.


> icWasya ©   (08.02.05 09:49) [5]

Я просто когда код обрезал, чтобы сюда вставить, слегка напутал.

Кстати, Move - это самый быстрый способ для копирования в данном случае ? Или есть что-нибудь, что работает ещё быстрее ?



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

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

Наверх




Память: 0.48 MB
Время: 0.044 c
3-1106072020
s_ilnar
2005-01-18 21:13
2005.02.20
Обработка 3000 xml файлов


4-1104852362
Эдик
2005-01-04 18:26
2005.02.20
Как получить список модомов Win 95/98/2000/XP


3-1106110903
Popov Oleg
2005-01-19 08:01
2005.02.20
SQL запрос к полю даты


8-1099661210
shuraspb
2004-11-05 16:26
2005.02.20
WEB-камера


4-1105121060
Oddin
2005-01-07 21:04
2005.02.20
Процессор