Главная страница
    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.47 MB
Время: 0.041 c
2-1212153367
assassin8899
2008-05-30 17:16
2008.06.29
Access


2-1212566516
n_sch
2008-06-04 12:01
2008.06.29
Строковые функции


15-1210800305
Антенна
2008-05-15 01:25
2008.06.29
Коды


15-1210962666
Layner
2008-05-16 22:31
2008.06.29
Покупка объектива для зеркалки в Москве, где


15-1211177834
Mozart
2008-05-19 10:17
2008.06.29
Active Directory?





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