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

Вниз

передача данных из масива в масив   Найти похожие ветки 

 
Lena19   (2004-02-12 20:09) [0]

Всем привет.
народ подскажите как перебросить
содержимое одного двух мерного массива в другой
такойже.
за как можно меньшее число шагов .


 
Тимохов   (2004-02-12 20:11) [1]

Динамического?
Если нет, то прямым присваиванием...


 
Lena19   (2004-02-12 20:17) [2]

масивы статические но при прямом присвоении типа (m1:=m1)
компилятор выдает несоответствие типов


 
Тимохов   (2004-02-12 20:21) [3]

Они у тебя наверное обявлены так?

a1: array [1..100] of integer;
a2: array [1..100] of integer;
так работать не будет.

Тогда обяви их так.

type
ta = array [1..100] of integer;
var
a1: ta;
a2: ta;


 
kentavr   (2004-02-12 20:21) [4]

Как ты это делаешь? Тип описала по-разному что ли?


 
Rouse_   (2004-02-12 20:25) [5]

move


 
Тимохов   (2004-02-12 20:27) [6]


> Rouse_ © (12.02.04 20:25) [5]

Массив строк, move"ом?
АВ будет.


 
Яичница   (2004-02-12 20:28) [7]

CopyMemory


 
Тимохов   (2004-02-12 20:30) [8]


> Яичница © (12.02.04 20:28) [7]

Массив строк, copymemory"ем?
Еще один АВ будет.


 
Lena19   (2004-02-12 20:33) [9]

один из масивов описан через typ а второй как переменная
масивы двухмерные как в етом случае использовать move ?


 
Тимохов   (2004-02-12 20:34) [10]

Lena19 (12.02.04 20:33) [9]
Почему бы вам не описать оба их через type.
Они же идентичные...


 
Anatoly Podgoretsky   (2004-02-12 23:56) [11]

Lena19 (12.02.04 20:33) [9]
Что то не то, ты никак не можешь присвоить тип переменной


 
Rouse_   (2004-02-13 00:01) [12]

> [6] Тимохов © (12.02.04 20:27)
А где в вопросе указание на массив строк?


 
Rouse_   (2004-02-13 00:07) [13]

> [6] Тимохов © (12.02.04 20:27)
и впредь, не делайте голословных утверждений:

procedure TForm1.Button1Click(Sender: TObject);
var
A: array [0..4] of String;
B: array [0..4] of String;
begin
A[0] := "This";
A[1] := "is";
A[2] := "only";
A[3] := "a";
A[4] := "test";
Move(A[0], B[0], SizeOf(A));
Caption := B[1];
end;


 
MBo   (2004-02-13 07:55) [14]

Зачем обсуждать непонятно что, пока автор не привел код?

>Rouse_ © (13.02.04 00:07) [13]
Подводные камни этого подхода чувствуешь?


 
Rouse_   (2004-02-13 09:06) [15]

> [14] MBo © (13.02.04 07:55)
Именно в данном варианте подводных камней нет (если конечно развить идею, то да)


 
Silver Alex   (2004-02-13 09:08) [16]

procedure TForm1.Button1Click(Sender: TObject);
var
A: array [0..4] of String;
B: array [0..4] of String;
begin
A[0] := "This";
A[1] := "is";
...
B:=Copy(A);// b:=copy(a,1,3);
end;


 
Тимохов   (2004-02-13 09:52) [17]

Rouse_ © (13.02.04 00:07) [13]
Я вроде слышал, что Вы модератор.
И где-то вы выражали благодарность кажется, Игорю Шевченко, за то что он иногда вас поправляет. Может я и ошибаюсь (память подводит), но не в этом суть.
Думаю если вы внимательно посмотрите на все это, почитаете хелп, то вы и мне выразите благодарность, т.к. этот подход является грубой ошибкой при работе с ДЛИННЫМИ строками. Когда вы поймете свою ошибку, буду очень признателен, если вы мне об этом скажете - приятно все-таки.
А, то что у вас нет ошибки - это счатье. Будет потом.

Всего хорошего.


 
MBo   (2004-02-13 09:59) [18]

>Именно в данном варианте подводных камней нет
Я за подсчет ссылок переживаю ;)
Правда, присвоение b[0] новой строки отработало корректно, но, думаю, могут быть и контрпримеры...


 
Тимохов   (2004-02-13 10:01) [19]


> MBo © (13.02.04 09:59) [18]

Ура! Я не одинок в разоблачении ереси.
С сылками будет полная фигня. Хотя иногда это все срабатывает - но до поры до времени.


 
Владислав   (2004-02-13 10:09) [20]

> Тимохов © (13.02.04 10:01) [19]

Дык вот если отдавать себе отчет в том, что с подсчетом ссылок полная фигня, взять на себя ответственность и с пониманием использовать полученный массив, ничего страшного действительно не произойдет. А вот если на такой массив в конечном итоге "забить", то проблем будет действительно выше крыши. Но уж если пошел на такой шаг, и "забил", то, конечно, сам себе злобный буратино. Ну и бесспорен тот факт, что изменять такую программу будет чрезвычайно сложно. И лучше ее снабдить, может быть, даже излишними комментариями.


 
Тимохов   (2004-02-13 10:12) [21]


> Дык вот если отдавать себе отчет в том, что с подсчетом
> ссылок полная фигня, взять на себя ответственность

Дык пример из 16 показывает обратное - никто ничего на себя не берет.


 
Владислав   (2004-02-13 10:23) [22]

> MBo © (13.02.04 09:59) [18]

В [16] за них можно не переживать.


 
Владислав   (2004-02-13 10:27) [23]

И в [13] можно не переживать.

Судя по асемблерному коду, знаковый бит в подсчете ссылок играет совсем иную роль, нежели просто дополнительное количество ссылок.
Если знаковый бит установлен, то счетчик ссылок на строку вообще не изменяется.


 
Тимохов   (2004-02-13 10:29) [24]


>
> Владислав © (13.02.04 10:27) [23]


В 13 все корректно работает по одной причине - там строки константы. Если вместо констант взять переменную типа строка, то будет ж.
Вы согласны?


 
Владислав   (2004-02-13 10:41) [25]

Абсолютно. При чем ж. будет длинной с массив плюс длина всех строк :)

Если использовать не константные строки, массив нужно ручками забивать нулями. При чем, компилятор не должен догадаться, что мы пытаемся присваивать строку. Иначе в первоначальном массиве будут битые ссылки (ну или они появяться позже).


 
Тимохов   (2004-02-13 10:44) [26]

Одним словом вопрос к Rouse_ © (13.02.04 00:07) [13] - признайте свою ошибку и закончим этот флейм (и вообще не мешало бы извиниться за обвинения в голословности).


 
Владислав   (2004-02-13 10:52) [27]

> Тимохов © (13.02.04 10:44) [26]

Ах вот чего так зацепились :)))


 
Тимохов   (2004-02-13 10:54) [28]


> Владислав © (13.02.04 10:52) [27]

Конечно, если уж я чего-то знаю, то знаю. Что меня обвинять в голосновности. Да и к тому давать неверные и вреднейшие ответы.


 
nexxiss   (2004-02-13 13:42) [29]

Можно через указатели на массивы, но это уже не совсем то, что необходимо автору вопроса


 
Anatoly Podgoretsky   (2004-02-13 17:18) [30]

Зачем MOVE используете, а раз используете, то должны понимать, что это делается в обход механизма ссылок и отвественность берется на себя.
Кроме того серьезные проблемы в Д8 не стоит использовать процедуры работающие с нетипизироваными указателями.


 
Тимохов   (2004-02-13 17:27) [31]


> Anatoly Podgoretsky © (13.02.04 17:18) [30]

В связи с http://delphimaster.net/view/15-1076655907/

Почему не красным цветом :))))))))


 
Mystic   (2004-02-13 17:28) [32]

Конртпример на присваивание строк при помощи Move. Сравните две реализации:

procedure TMainForm.TestBtn1Click(Sender: TObject);
var
A, B: string;
begin
A := "Test";
A := A + A; // (*)
Move(A, B, SizeOf(A));
ShowMessage(A);
B[1] := "R";
ShowMessage(A);
B := "";
end;

procedure TMainForm.TestBtn2Click(Sender: TObject);
var
A, B: string;
begin
A := "Test";
A := A + A;
B := A;
ShowMessage(A);
B[1] := "R";
ShowMessage(A);
end;


(*) этот оператор нужен для того, чтобы разместить строку в динамической памяти. Первоначально после инициализации строка указывает на объект в секции данных, которых имеет счетчих ссылок, равный -1 ($FFFFFFFF). При копировании методом Move таких строк максимальная неприятность --- Memory Leak.


 
Тимохов   (2004-02-13 17:31) [33]


> Mystic © (13.02.04 17:28) [32]

Я что-то тоже ценность не понимаю.
В чем контр пример? Вывод какой?


 
Sandman25+1   (2004-02-13 17:37) [34]

[32] Mystic © (13.02.04 17:28)

Еще лучше так:

A := "Test";
A := A + A; // (*)
Move(A, B, SizeOf(A));
ShowMessage(A);
B[1] := "R";
ShowMessage(A);
B := "";
ShowMessage(A);


 
Mystic   (2004-02-13 17:43) [35]

Нельзя использовать Move для копирования строк.


 
Тимохов   (2004-02-13 17:45) [36]


> Нельзя использовать Move для копирования строк.

НЕлья, а кто спорит?
О том то и речь, начиная с самого начала :)))))


 
Mystic   (2004-02-13 17:55) [37]

Но написание контрпримера в лоб не проходит, ведь

var
A, B: string;
begin
A := "Test";
Move(A, B, SizeOf(A));


отработает корректно


 
Anatoly Podgoretsky   (2004-02-13 17:58) [38]

Тимохов © (13.02.04 17:27) [31]
Потому что я описываю свой подход к допустимости использования MOVE для автоматически управляемыми объектами и также на серьезные проблемы в .NET


 
Тимохов   (2004-02-13 18:05) [39]

Граждане, какой вывод красной строкой?

Я так понимаю, что как обычно - move использовать можно, но с умом? Так?


 
WebErr   (2004-02-13 18:40) [40]

Бла-бла-бла...
Переходите на С там с указателями проще не куда, а строки и указатели там вообще не отличаются вашу проблему с копированием массива строк s[N][M] в t[N][M] можно рашить простым

memcpy(t[0],s[0],M*N);

Где char s[N][M] и char s[][M] - это просто одно и то же :))))



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

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

Наверх




Память: 0.57 MB
Время: 0.03 c
3-79672
Nikolai_S
2004-01-30 17:19
2004.02.25
Перекрестный запрос


7-80321
KommandorDi
2003-12-03 18:06
2004.02.25
Ошибка при автозагрузке вместе с Windows


3-79619
chtr
2004-01-19 15:37
2004.02.25
MSSQL через интернет?


3-79597
tria
2004-02-02 14:26
2004.02.25
Помогите пож. составить запрос.


1-79753
Слэш
2004-02-12 08:33
2004.02.25
Форма StayOnTop не скрывается





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