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

Вниз

Как пользоватся Move?   Найти похожие ветки 

 
Kolan ©   (2006-10-17 14:38) [0]

Здравствуйте,
 Научите.

Нужно скопировать один массив в другой. Вот так делаю без Move и все работает.

SetLength(FPackage, Length(Package));
 for I := Low(Package) to High(Package) do
   FPackage[I] := Package[I];
 


Вот так я делаю с Move и в итоге получаю AV.

SetLength(FPackage, Length(Package));
 Move(Package, FPackage,
   Length(Package)*SizeOf(Package[Low(Package)]));


1. В чем моя ошибка?
2. Как правильно.


 
Palladin ©   (2006-10-17 14:42) [1]

то что написано справедливо для статических массивов, в случае динамических

SetLength(FPackage, Length(Package));
Move(Package[0], FPackage[Low(Package)], Length(Package)*SizeOf(Package[Low(Package)]


 
MBo ©   (2006-10-17 14:43) [2]

Это уже третья или четвертая ветка, где ты спрашиваешь практически одно и то же - об использовании динамических массивов (строк) в var-параметрах...


 
palva ©   (2006-10-17 14:49) [3]

Зачем move? Присваивай массивы:
{$APPTYPE CONSOLE}
type
 Tm = array of char;
var
 m1, m2: Tm;
begin
 SetLength(m1, 2);
 m1[0] := "q";
 m1[1] := "w";
 m2 := m1;
 WriteLn(m2[0], m2[1]); // qw
end.


 
Kolan ©   (2006-10-17 14:50) [4]


> SetLength(FPackage, Length(Package));
> Move(Package[0], FPackage[Low(Package)], Length(Package)*SizeOf(Package[Low(Package)]

За пример благодарю.

> Это уже третья или четвертая ветка, где ты спрашиваешь практически
> одно и то же - об использовании динамических массивов (строк)
> в var-параметрах...

И вопрос №1 для меня пока на 100 не разрешен.

Вот это особенно FPackage[Low(Package)] остальные параметры вроде ясно ...


 
Kolan ©   (2006-10-17 14:52) [5]


> Зачем move? Присваивай массивы:

Не выйдет Package - открытый...
SavePackage(Package: array of Byte);


 
Kolan ©   (2006-10-17 14:54) [6]


> FPackage[Low(Package)]

Почему Low Package, а не FPackage?


 
Palladin ©   (2006-10-17 14:55) [7]


> FPackage[Low(Package)]


пока, применительно к Делфи, это равносильно FPackage[0], бо в открытых и динамических массивы нижний индекс всегда равен 0.. а написал так... просто... по инерции :)


 
Kolan ©   (2006-10-17 14:57) [8]

Может там
FPackage[Low(FPackage)]

Плохой пример взял имена похожи :(


 
MBo ©   (2006-10-17 14:58) [9]

>И вопрос №1 для меня пока на 100 не разрешен.
var-параметры представляют собой передаче параметра по ссылке - неявные указатели - процедуре передается адрес, однако программист передает не адрес в явном виде (с использованием оператора @ или указательных типов), а саму переменную, а компилятор подставляет в вызов ее адрес.
Динамические массивы и длинные строки - суть указатели на нулевой элемент массива (первый символ строки). Если использовать переменную-массив как var-параметр, получится передача указателя на указатель, а нужны данные, поэтому в подобных случаях нужно использовать Arr[0], String[1], или PChar(String)^


 
palva ©   (2006-10-17 14:59) [10]

> Не выйдет Package - открытый...
Первый раз об этом говоришь, может еще что-нибудь скрываешь?


 
Kolan ©   (2006-10-17 15:07) [11]


> palva ©   (17.10.06 14:59) [10]

Не больше ничего, конечно надо было это сказать.

> MBo ©   (17.10.06 14:58) [9]

А вот оно как.. шас пойду конкатенацию сделаю..



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

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

Наверх




Память: 0.49 MB
Время: 0.052 c
2-1161084317
Ezorcist
2006-10-17 15:25
2006.11.05
Как решить ошибку несовпадения типов TBitmap и tagBitmap?


1-1159008685
DelphiLamer
2006-09-23 14:51
2006.11.05
Как получить список всех процедур в библиотеке?


15-1161023303
Евгений Р.
2006-10-16 22:28
2006.11.05
Delphi 5


15-1161170065
_Mouse_
2006-10-18 15:14
2006.11.05
Поиск изменений в коде.


6-1150219083
Интересующийся
2006-06-13 21:18
2006.11.05
Как определьть IP указывающий основной шлюз?