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

Вниз

копировать массив в другой массив   Найти похожие ветки 

 
Тимоха111   (2011-02-01 22:15) [0]

Всем привет, существуют ли в дельфи 7 стандартные фунции, позволяющие скопировать динамический массив, т.е.
mass1:array[0..6] of real;
mass2:array of real;

чтото типо того можно сделать: mass2 := mass1  ??


 
Прохожий   (2011-02-01 22:24) [1]

mass2:=@mass1;


 
Женя (Прохожий - это я)   (2011-02-01 22:26) [2]

Удалено модератором


 
Amoeba_   (2011-02-01 22:26) [3]


> Прохожий   (01.02.11 22:24) [1]
>
> mass2:=@mass1;

Уверен?


 
Женя (Прохожий - это я)   (2011-02-01 22:29) [4]

mass2:=@mass1;
правда это  не копирование
у тебя просто в памяти один  массив и две переменные
через которые ты можешь к нему обашаться и редактировать
а чтоб копировать :

for i:=0 to 6 do begin
SetLength(mass2,Length(mass2));
mass2[i]:=mass1[i];
end;


 
Женя (Прохожий - это я)   (2011-02-01 22:31) [5]

пишеш такую процедуру и усе
for i:=0 to 6 do begin можно написать для общего случая :
for i:=0 to Length(mass1) do begin


 
Тимоха111   (2011-02-01 22:34) [6]

спасибо, этот вариант и так понятен, в вопросе было конкретно есть ли стандартные функции, без использования циклов и т.п.


 
Женя (Прохожий - это я)   (2011-02-01 22:39) [7]

Удалено модератором


 
Игорь Шевченко ©   (2011-02-01 22:41) [8]


> в вопросе было конкретно есть ли стандартные функции, без
> использования циклов и т.п.


Move


 
Тимоха111   (2011-02-01 22:49) [9]

Игорь Шевченко, Благодарю!


 
KilkennyCat ©   (2011-02-01 22:54) [10]


> Женя (Прохожий - это я)   (01.02.11 22:29) [4]

> for i:=0 to 6 do begin
> SetLength(mass2,Length(mass2));
> mass2[i]:=mass1[i];
> end;

гениально.
почувствуй разницу:
SetLength(mass2,Length(mass1));
for i:= 0 to 6 do mass2[i]:=mass1[i];

универсально и защищенно от ошибок границ:
SetLength(mass2,Length(mass1));
y := 0;
for i:= Low(mass1) to high(mass1) do begin
 mass2[y]:=mass1[i];
 inc(y);
end;


 
Тимоха111   (2011-02-01 23:24) [11]

KilkennyCat, спасибо:)


 
Jeer ©   (2011-02-02 09:44) [12]


> Тимоха111   (01.02.11 22:15)
>
> Всем привет, существуют ли в дельфи 7 стандартные фунции,
>  позволяющие скопировать динамический массив


Если два динамических массива, то:
arTwo := Copy(arOne,0,Length(arOne));


 
han_malign   (2011-02-02 10:45) [13]


> mass2:=@mass1;
> правда это  не копирование
> у тебя просто в памяти один  массив и две переменные
> через которые ты можешь к нему обашаться и редактировать

- ну-ну..., а потом все внезапно умирает:
program darr;
{$APPTYPE CONSOLE}
{$IF CompilerVersion >= 15.0}
{$WARN UNSAFE_TYPE OFF}
{$WARN UNSAFE_CODE OFF}
{$WARN UNSAFE_CAST OFF}
{$IFEND}

var    refCount : longword;
      itemCount: longword; //!!! Подделка структуры динамическго массива
      _m: array[0..7]of integer;

type tdarr = array of integer;

procedure _fail(var v: tdarr);
var m1: tdarr;
begin
  m1:= @_m;
  Writeln("2:refCount ", refCount);
  v:= copy(m1, 2, 3);
  // а вот здесь m1 выходит из области видимости
end;

var m2: tdarr;
   i: integer;
begin
 for i:= low(_m) to high(_m) do _m[i]:= i;

 //подделываем внутренню струтктуру динамического массива
 refCount:= 0; itemCount:= Length(_m);
 m2:= copy(tdarr(@_m), 0, 8);

 Write(Length(m2),"/",itemCount, ": ");
 for i:= 0 to Length(m2)-1 do write(m2[i], " ");
 writeln;

 refCount:= 1;
 Writeln("1:refCount ", refCount);
 _fail(m2);
 Writeln("3:refCount ", refCount, " !!!");
 Write(Length(m2),"/",itemCount, ": ");
 for i:= 0 to Length(m2)-1 do write(m2[i], " ");
 writeln;

 refCount:= 0; //!!!
 itemCount:= 0;//!!! - чтобы все поняли, что это наверняка
try
 Writeln("1:refCount ", refCount, " !!!");
 _fail(m2);
 Writeln("До сюда мы дойти не должы! refCount ", refCount, " x ", itemCount);
except
 // хотя этого мы тоже не увидим
 // - потому что менеджер памяти убит горем
 writeln("А чего вы еще ожидали? refCount ", refCount);
 raise;
end;
end.



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

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

Наверх




Память: 0.48 MB
Время: 0.004 c
2-1296564138
Сергей
2011-02-01 15:42
2011.05.08
Как расширить атрибуты файла?


2-1296650084
Гражданин
2011-02-02 15:34
2011.05.08
Экран


15-1296070554
Super XML
2011-01-26 22:35
2011.05.08
Сравнение XML


2-1296638668
Godod
2011-02-02 12:24
2011.05.08
Ошибка access violation at adress


15-1295739103
Грамотей
2011-01-23 02:31
2011.05.08
Где взять скомпилированные dll от ODE?





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