Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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]

Если они одного типа, то какие проблемы? Объяви еще одну переменную и юзай ее.


Наверх

Титульная страница Поиск, карта сайта Написать письмо