Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

передача в процедуру массива   Найти похожие ветки 

 
webpauk ©   (2012-04-05 12:53) [0]

type
 TStrArr: array[1..5] of String;

procedure DoSome(Value: TStrArr);
begin
 ...
end;

procedure MyProc;
begin
 DoSome(["Й", "Ц", "У", "К", "Е"]); - выдает ошибку
end;

Подскажите как правильно передать в функцию массив


 
Плохиш ©   (2012-04-05 12:55) [1]


> procedure DoSome(Value: TStrArr);

Описан параметр типа статического массива

>  DoSome(["Й", "Ц", "У", "К", "Е"]); - выдает ошибку
>

Предаётся открытый массив.
Правильно ошибку выдаёт.


 
webpauk ©   (2012-04-05 12:57) [2]


> Подскажите как правильно передать в функцию массив


 
begin...end ©   (2012-04-05 12:59) [3]

procedure DoSome(Arr: array of string);
var
 I: Integer;
begin
 for I := 0 to High(Arr) do
   ShowMessage(Arr[I])
end

procedure MyProc;
begin
 DoSome(["Й", "Ц", "У", "К", "Е"])
end

См. в справке: Open array parameters, Open array constructors.


 
webpauk ©   (2012-04-05 13:12) [4]


> begin...end ©   (05.04.12 12:59) [3]


абсолютно неподходящий вариант.
нужен именно мой вариант реализации procedure DoSome(Value: TStrArr);

как передать данные?


 
begin...end ©   (2012-04-05 13:18) [5]

> webpauk ©   (05.04.12 13:12) [4]

type
 TStrArr = array [1..5] of string;

procedure DoSome(Arr: array of string);
var
I: Integer;
begin
for I := Low(Arr) to High(Arr) do
  ShowMessage(Arr[I])
end;

var
 A: TStrArr;
begin
 A[1] := "Что,";
 A[2] := "и";
 A[3] := "так";
 A[4] := "не";
 A[5] := "подходит?";
 DoSome(A)
end


 
CRLF   (2012-04-05 13:18) [6]

type
TStrArr: array[1..5] of String;

procedure DoSome(Value: TStrArr);
begin
...
end;

procedure MyProc;
var
 StrArr: TStrArr;
begin
StrArr[1] := "Й";
StrArr[2] := "Ц";
StrArr[3] := "У";
StrArr[4] := "К";
StrArr[5] := "Е";
DoSome(StrArr); - не выдает ошибку
end;

P.S. Вообще-то общепринятый отступ -- два пробела.


 
webpauk ©   (2012-04-05 13:19) [7]


> begin...end ©   (05.04.12 13:18) [5]

криво... жаль. теряется изящность


 
begin...end ©   (2012-04-05 13:19) [8]

> procedure DoSome(Arr: array of string)
procedure DoSome(Arr: TStrArr)


 
webpauk ©   (2012-04-05 13:27) [9]

придется дописывать функцию:
function SetStrArr(const cArr: array of String): TStrArr;


 
Anatoly Podgoretsky ©   (2012-04-05 13:27) [10]

Тогда так
procedure DoSome(const Arr: array of const);


 
begin...end ©   (2012-04-05 13:30) [11]

> webpauk ©   (05.04.12 13:19) [7]

Я так и не понял, элементы массива заранее (до выполнения программы) известны или нет. Если известны, то чем не устраивают открытые массивы? Хотя можно и без них:

const
 Arr: TStrArr = ("Ох,", "тяжёлая", "это", "работа", "...");
begin
  DoSome(Arr)
end

А если элементы формируются уже на этапе выполнения программы, тогда о каком более изящном решении может идти речь?


 
webpauk ©   (2012-04-05 13:45) [12]


> begin...end ©   (05.04.12 13:30) [11]

элементы неизвестны... просто в качестве примера передал "йцуке"


 
toropoff   (2012-04-05 16:49) [13]

если готовый код нехочется переписывать то делайте типа:

  function my(val: array of String): TStrArr;
  var
    i: Integer;
  begin
    for i := 0 to high(val) do result[i]:= val[i];

  end;
 
  ...

  DoSome( my( ["Й", "Ц", "У", "К", "Е"] ) );


 
Медвежонок Пятачок ©   (2012-04-05 16:55) [14]

procedure DoSome(Value: string);
begin
for i := 1 to length(value) do
end;

procedure MyProc;
begin
DoSome("ЙЦУКЕН");
end;


 
CRLF   (2012-04-05 17:21) [15]


> Медвежонок Пятачок ©   (05.04.12 16:55) [14]

фигня. у него только в примере строки односимвольные. и научитесь уже строки передавать как const. и массивы тоже.



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

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.073 c
15-1333057317
Германн
2012-03-30 01:41
2013.03.22
Взаимодействие 64-х битного приложения с 32-х битной библиотекой


15-1343674849
alexdn
2012-07-30 23:00
2013.03.22
php


2-1346669848
Phoenix_
2012-09-03 14:57
2013.03.22
что будет быстрее


15-1312895393
Kerk
2011-08-09 17:09
2013.03.22
Шахматный турнир


4-1259019636
SPeller
2009-11-24 02:40
2013.03.22
Внедрение кода в другой поток. Замечания, дополнения, критика