Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.06.29;
Скачать: [xml.tar.bz2];

Вниз

Копия массива   Найти похожие ветки 

 
Massiv   (2008-06-02 17:34) [0]

Подскажите как сделать копию заполненного массива.
В книгах пишут что достаточно присвоить один массив к другому, но так у меня не получается. Привожу как пример свой код:

type
 TTree = record
   Title : String;
   ID    : Integer;
 end;

var
 Tab1 : Array of TTree;
 Tab2 : Array of TTree;

begin
SetLength(Tab1, 498);
SetLength(Tab2, 498);

Tab1 := Tab2; - не работает :((


 
Reindeer Moss Eater ©   (2008-06-02 17:51) [1]

SetLength(Tab1, 498);
SetLength(Tab2, 498);

А дальше move из первого во второй.


 
DiamondShark ©   (2008-06-02 17:54) [2]


> В книгах пишут что достаточно присвоить один массив к другому

Так это про статические массивы пишут. А у тебя динамические.
Тут ручками, поэлементно.


> А дальше move из первого во второй.

Чудесов со строками не боишься?


 
Reindeer Moss Eater ©   (2008-06-02 17:56) [3]

Чудесов со строками не боишься?

Ты думаешь я не заметил у него длинных строк?
Заметил.


 
DiamondShark ©   (2008-06-02 17:59) [4]


> Reindeer Moss Eater ©   (02.06.08 17:56) [3]
> Чудесов со строками не боишься?
>
> Ты думаешь я не заметил у него длинных строк?
> Заметил.

Посто ты такой коварный, чтоб народ не расслаблялся?
;)


 
Reindeer Moss Eater ©   (2008-06-02 18:01) [5]

так если первый массив не умрет, то строки останутся живы.


 
palva ©   (2008-06-02 18:06) [6]


> то строки останутся живы.

Живы, конечно. Но будут синхронно меняться, чего автор, по-видимому, не хотел.
{$APPTYPE CONSOLE}
var
 a1, a2: array of String;
begin
 SetLength(a1, 3);
 a1[0] := "000";
 a1[1] := "111";
 a1[2] := "222";
 SetLength(a2, 3);
 move(a1, a2, 12);
 WriteLn(a1[1]); // 111
 WriteLn(a2[1]); // 111
 a1[1][2] := "x";
 WriteLn(a1[1]); // 1x1
 WriteLn(a2[1]); // 1x1
end.


 
ZENsan ©   (2008-06-02 18:12) [7]

type
TTree = record
  Title : String;
  ID    : Integer;
end;

 TTreeArray = array of TTree;
var
Tab1, Tab2 : TTreeArray;

begin
SetLength(Tab1, 498);
SetLength(Tab2, 498);

Tab1 := Tab2;
end;


 
ZENsan ©   (2008-06-02 18:13) [8]

Самые основы паскаля...


 
DiamondShark ©   (2008-06-02 18:20) [9]


> ZENsan ©   (02.06.08 18:13) [8]
> Самые основы паскаля...

Которых ты не выучил.


> palva ©   (02.06.08 18:06) [6]
>
> > то строки останутся живы.
>
> Живы, конечно. Но будут синхронно меняться, чего автор,
> по-видимому, не хотел.

Это не самое страшное.
Гораздо интереснее
a1[0] := "qweqwe";
a2[0] := "oiuoiu"; // здравствуй, инвалид поинтер оперэйшн


 
Palladin ©   (2008-06-02 18:24) [10]


>ZENsan ©

1. в паскале нет динамических массивов он тут нипричем
2. зачем тебе выделять и тут же освобождать память?
3. это копирование ссылки на массив, а не данных массива

оба, описанных тобою, идентификатора являются ссылками. со всеми вытекающими отсюда последствиями


 
ZENsan ©   (2008-06-02 18:28) [11]

type
 TTree = record
   Title: string;
   ID: Integer;
 end;

 TTreeArray = array of TTree;
var
 Tab1, Tab2: TTreeArray;

begin
 SetLength(Tab1, 498);
 SetLength(Tab2, 498);

 Tab1[0].Title := "asdasdasd";
 Tab2 := Copy(Tab1, 0);
 Tab2[0].Title := "sdfsdfsdf";

 WriteLn(Tab1[0].Title, " ", Tab2[0].Title);
 ReadLn;
end.

да да попутался.. это же динамические..
Так чё тут умничать - просто Copy i всё..


 
ZENsan ©   (2008-06-02 18:30) [12]

И ыто я вообще-то скопировал исходник от автора...насчёт 3 пункта..


 
Sapersky   (2008-06-02 19:31) [13]

Если Copy, то SetLength(Tab2, 498) не нужен.


 
zensan ©   (2008-06-02 19:36) [14]

Это к автору.



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

Форум: "Начинающим";
Текущий архив: 2008.06.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.051 c
2-1212221404
Pi:=3.14...
2008-05-31 12:10
2008.06.29
Пример ключа в реестр


15-1211026442
Knight
2008-05-17 16:14
2008.06.29
Можно ли поставить IE7 на Win2k?


2-1212223941
Pi:=3.14...
2008-05-31 12:52
2008.06.29
Код в программе


2-1212493010
Nicolas
2008-06-03 15:36
2008.06.29
Запрос на составную выбору без повторений


3-1201011542
Olegus
2008-01-22 17:19
2008.06.29
ParamByName





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