Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.05.08;
Скачать: CL | DM;

Вниз

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

 
Тимоха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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.007 c
15-1296073510
светик
2011-01-26 23:25
2011.05.08
курсовая по ооп


2-1296589981
Женя
2011-02-01 22:53
2011.05.08
TImage


2-1295949753
Тимоха111
2011-01-25 13:02
2011.05.08
Захват изображения части окна


2-1296587747
Тимоха111
2011-02-01 22:15
2011.05.08
копировать массив в другой массив


15-1295421443
Unknown_user
2011-01-19 10:17
2011.05.08
Изменение структуры БД