![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
передача в процедуру массива [D7, XP]
webpauk © (2012-04-05 12:53:00)type
TStrArr: array[1..5] of String;
procedure DoSome(Value: TStrArr);
begin
...
end;
procedure MyProc;
begin
DoSome(['Й', 'Ц', 'У', 'К', 'Е']); - выдает ошибку
end;
Подскажите как правильно передать в функцию массив
CRLF (2012-04-05 17:21:00) [1]
> Медвежонок Пятачок © (05.04.12 16:55) [14]
фигня. у него только в примере строки односимвольные. и научитесь уже строки передавать как const. и массивы тоже.
Медвежонок Пятачок (2012-04-05 16:55:00) [2]procedure DoSome(Value: string);
begin
for i := 1 to length(value) do
end;
procedure MyProc;
begin
DoSome('ЙЦУКЕН');
end;
toropoff (2012-04-05 16:49:00) [3]если готовый код нехочется переписывать то делайте типа:
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( ['Й', 'Ц', 'У', 'К', 'Е'] ) );
webpauk (2012-04-05 13:45:00) [4]
> begin...end © (05.04.12 13:30) [11]
элементы неизвестны... просто в качестве примера передал "йцуке"
begin...end (2012-04-05 13:30:00) [5]> webpauk © (05.04.12 13:19) [7]
Я так и не понял, элементы массива заранее (до выполнения программы) известны или нет. Если известны, то чем не устраивают открытые массивы? Хотя можно и без них:
const
Arr: TStrArr = ('Ох,', 'тяжёлая', 'это', 'работа', '...');
begin
DoSome(Arr)
end
А если элементы формируются уже на этапе выполнения программы, тогда о каком более изящном решении может идти речь?
webpauk (2012-04-05 13:27:00) [6]придется дописывать функцию:
function SetStrArr(const cArr: array of String): TStrArr;
Anatoly Podgoretsky (2012-04-05 13:27:00) [7]Тогда так
procedure DoSome(const Arr: array of const);
webpauk (2012-04-05 13:19:00) [8]
> begin...end © (05.04.12 13:18) [5]
криво... жаль. теряется изящность
begin...end (2012-04-05 13:19:00) [9]> procedure DoSome(Arr: array of string)
procedure DoSome(Arr: TStrArr)
begin...end (2012-04-05 13:18:00) [10]> 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:00) [11]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:12:00) [12]
> begin...end © (05.04.12 12:59) [3]
абсолютно неподходящий вариант.
нужен именно мой вариант реализации procedure DoSome(Value: TStrArr);
как передать данные?
begin...end (2012-04-05 12:59:00) [13]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 12:57:00) [14]
> Подскажите как правильно передать в функцию массив
Плохиш (2012-04-05 12:55:00) [15]
> procedure DoSome(Value: TStrArr);
Описан параметр типа статического массива
> DoSome(['Й', 'Ц', 'У', 'К', 'Е']); - выдает ошибку
>
Предаётся открытый массив.
Правильно ошибку выдаёт.