![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как скопировать один массив массивов в другой?
AKE © (2010-07-02 19:12:00)сабж.
Jeer (2010-07-03 17:25:00) [21]Вкупе, вот такие операции породят утечку, т.к. будет утеряна ссылка на В и ее инициализация (аллокация).
SetLength(ardB, 5);
arsB := arsA;
Anatoly Podgoretsky (2010-07-03 17:25:00) [22]> Amoeba_ (03.07.2010 17:18:14) [14]
Не надо это слишком мягко сказано, это просто вредно, ведь придется сначала
выделить, потом освободить память, потом присвоить указатель.
Amoeba_ (2010-07-03 17:18:00) [23]
> Демо © (03.07.10 16:53) [11]
> для динамического массива, кроме этого, нужно ещё выполнить
>
> SetLength(B,Length(B));
Не надо.
Читаем справку:
If X and Y are variables of the same dynamic-array type, X :=Y points X to the same array as Y. (There is no need to allocate memory for X before performing this operation.)
Jeer (2010-07-03 17:18:00) [24]arsA,arsB: array[0..4] of double;
ardA, ardB: array of double;
SetLength(ardA, 5);
SetLength(ardB, 5);
arsA[0] := 1;
arsB := arsA;
arsB[0] := 2;
ShowMessage(Format('%f %f',[arsA[0], arsB[0]]));
ardA[0] := 1;
ardB := ardA;
ardB[0] := 2;
ShowMessage(Format('%f %f',[ardA[0], ardB[0]]));
Как говорится -"Почувствуй разницу"
Jeer (2010-07-03 17:16:00) [25]
> Демо © (03.07.10 16:53) [11]
Иди покури "травку", прежде чем советовать.
Демо (2010-07-03 16:53:00) [26]Как для динамических, так и для статических массивов, достаточно выполнить:
B := A;
для динамического массива, кроме этого, нужно ещё выполнить
SetLength(B,Length(B));
Anatoly Podgoretsky (2010-07-03 13:42:00) [27]> Германн (03.07.2010 01:43:09) [9]
Не обязательно, но копируемый массив должен быть такого же или меньшего
объема.
Германн (2010-07-03 01:43:00) [28]
> А если это массив массивов
Для статических массивов это не имеет ни малейшего значения. Во всяком случае, если оба массива одного типа (соломку всё-таки решил подстелить :).
AKE (2010-07-02 22:44:00) [29]Jeer © (02.07.10 22:09) [7]
Знак вопроса забыл поставить...
Jeer (2010-07-02 22:09:00) [30]
> AKE (02.07.10 21:57) [6]
>
> Jeer © (02.07.10 21:51) [5]
> А если это массив массивов то всё перекопируется нормально.
> ..
Непонятно, это вопрос или утверждение ?
AKE (2010-07-02 21:57:00) [31]Jeer © (02.07.10 21:51) [5]
А если это массив массивов то всё перекопируется нормально...
Jeer (2010-07-02 21:51:00) [32]Вообще-то, для статических массивов одинаковой размерности
A := B;
означает копирование содержимого А в B.
Для динамических же - копирование адреса.
AKE (2010-07-02 20:29:00) [33]Германн © (02.07.10 20:02) [3]
Спасибо...
Германн (2010-07-02 20:02:00) [34]Move
AKE (2010-07-02 19:36:00) [35]статический массив статических массивов...
Amoeba_ (2010-07-02 19:22:00) [36]Какой? Статический или динамический?