Текущий архив: 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.47 MB
Время: 0.045 c