Главная страница
    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.47 MB
Время: 0.057 c
3-1157487661
Itonix
2006-09-06 00:21
2006.11.05
Decision Cube


2-1161235080
pathfinder
2006-10-19 09:18
2006.11.05
TMemIniFile...


1-1159163057
oleg__
2006-09-25 09:44
2006.11.05
Код нажатой клавиши


15-1161097796
SergP
2006-10-17 19:09
2006.11.05
Подскажите где взять утилитку для Low Level Format...


6-1149699693
Whitevova
2006-06-07 21:01
2006.11.05
Как передать голос по сети и ..., Internet





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский