Главная страница
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.025 c
6-1102612799
Eraszer
2004-12-09 20:19
2005.02.20
Получение списка локальных IP адресов.


4-1104145987
tradakad
2004-12-27 14:13
2005.02.20
как назначить иконку для итема PopupMenu при его создании


14-1106820760
Dimedrol
2005-01-27 13:12
2005.02.20
Cordless optical mouse


1-1107330913
Игорь нтк
2005-02-02 10:55
2005.02.20
День недели


1-1107847509
Masivv
2005-02-08 10:25
2005.02.20
Создание пустого BMP