Форум: "Начинающим";
Текущий архив: 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