![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Array Pointer [D6, XP]
webpauk © (2007-06-07 16:16:00)есть несколько array of TmyRec (Arr1, Arr2, Arr3).
Подскажите как при разных условиях использовать единую процедуру для работы с массивом:
var
fArr: Pointer;
begin
if условиеthen fArr:=Arr1;
if условиеthen fArr:=Arr2;
if условиеthen fArr:=Arr3;
SetLength( ?fArr ?, Length( ?fArr ?)+1);
end;
Loginov Dmitry (2007-06-08 09:40:00) [1]> c,a1,a2,a3:^TMyIntArray;
Зачем крышечка-то?
Можно и так объявить:
var
c,a1,a2,a3:TMyIntArray;
а присвоение
c := a1 в случае дин. массива приведет к копированию адреса с увеличением счетчика ссылок.
Плохиш (2007-06-08 01:37:00) [2]
> webpauk (07.06.07 18:06) [16]
Ты вообще о том, что процедуры и функции могут иметь параметры, которые можно в них изменять знаешь? Стоило в конце-то концов наконец книжку-какую почитать.
PS. Обычно люди в процессе выполнения какой-то работы повышают своё мастерство, но ты, судя по твоим вопросам, к сожалению, к этим людям не относишься :-(
webpauk (2007-06-07 18:06:00) [3]
> Palladin © (07.06.07 17:22) [15]
сам попробуй свой пример на практике
Palladin (2007-06-07 17:22:00) [4]
> webpauk (07.06.07 17:12) [14]
для особо одаренных, а ты внимательней посмотри что написано в примере
Var
c,a1,a2,a3:^TMyIntArray;
а не
Var
a1,a2,a3:TMyIntArray;
c:^TMyArray;
webpauk (2007-06-07 17:12:00) [5]
> Palladin © (07.06.07 16:26) [2]
Var
a1,a2,a3: TMyIntArray;
c: ^TMyIntArray;
begin
c:=@a1;
SetLength(c^, 5);
ShowMessage(IntToStr(High(c^))+#13+IntToStr(High(a1)));
end;
webpauk (2007-06-07 17:12:00) [6]
> Сергей М. © (07.06.07 17:05) [12]
как-то не догадался
спсб
Сергей М. (2007-06-07 17:05:00) [7]
> webpauk (07.06.07 16:16)
Разместить все свои массивы не в отдельных переменных, а в массиве- религия не позволяет ?
Или первый раз слышишь про возможность организации массива массивов ?
webpauk (2007-06-07 16:58:00) [8]
> Palladin © (07.06.07 16:26) [2]
сам то пробовал?
авыф (2007-06-07 16:57:00) [9]если уж писать то так:
case I of
1: begin
SetLength(Arr1, Length(Arr1)+1);
Arr1[Length(Arr1)-1):=I;
end;
2: begin
SetLength(Arr2, Length(Arr2)+1);
Arr2[Length(Arr2)-1):=I;
end;
3: begin
SetLength(Arr3, Length(Arr3)+1);
Arr3[Length(Arr3)-1):=I;
end;
end;
webpauk (2007-06-07 16:45:00) [10]
> Reindeer Moss Eater © (07.06.07 16:38) [8]
if I=1 then
begin
SetLength(Arr1, Length(Arr1)+1);
Arr1[Length(Arr1)-1):=I;
end;
if I=2 then
begin
SetLength(Arr2, Length(Arr2)+1);
Arr2[Length(Arr2)-1):=I;
end;
if I=3 then
begin
SetLength(Arr3, Length(Arr3)+1);
Arr3[Length(Arr3)-1):=I;
end;
так что ли, по-твоему?
Reindeer Moss Eater (2007-06-07 16:38:00) [11]Это одно и тоже. В зависимости от условия работаешь с той или иной переменной.
webpauk (2007-06-07 16:36:00) [12]
> Reindeer Moss Eater © (07.06.07 16:32) [6]
if условие1 then
if условие2 then
так лучше?
Reindeer Moss Eater (2007-06-07 16:32:00) [13]так у тебя уже вилка в коде на три строки
webpauk (2007-06-07 16:31:00) [14]
> Reindeer Moss Eater © (07.06.07 16:26) [3]
я хочу в процедуре работать с одним array, а не делать в зависимости от условия 100 одинаковых процедур с разными array
Palladin (2007-06-07 16:27:00) [15]ну и конечно еще перед этим нужно cделать New(a1), New(a2), New(a3)
Reindeer Moss Eater (2007-06-07 16:26:00) [16]А зачем первые три строки после бегина?
И почему прямо там не установить длину?
Palladin (2007-06-07 16:26:00) [17]
Type
TMyIntArray=Array of Integer;
Var
c,a1,a2,a3:^TMyIntArray;
begin
c:=a1;
SetLength(c^,5);
end;
Desdechado (2007-06-07 16:25:00) [18]Если они одного типа, то какие проблемы? Объяви еще одну переменную и юзай ее.