Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Массив как входной параметр


Автор: MaxxSoftware 25.5.2005, 12:15
Не могу сделать массив входным параметром функции...

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

пишу примерно что то такое:
function func (a:array [0..10] of string):boolean
ругается на скобки квадратные, убераю диапозон - все одно ругается... вообще можно как то это реализовать?

Автор: Yanis 25.5.2005, 12:26
Цитата(MaxxSoftware @ 25.5.2005, 12:15)
function func (a:array [0..10] of string):boolean

В качестве параметров можно передавать только тип. А массив это не тип. Значит делаем так:
Код

{ ... }
type
  MyArray = array [0..10] of string;
{ ... }
function func (const x: MyArray):boolean;
begin
// work
end;

Добавлено @ 12:32
Цитата(Yanis @ 25.5.2005, 12:26)
В качестве параметров можно передавать только тип.

Немного не корректно. Перефразирую: В качестве параметров можно передавать только переменные определённого типа.
smile

Автор: Dynamic 25.5.2005, 13:41
Цитата(Yanis @ 25.5.2005, 12:26)
В качестве параметров можно передавать только переменные определённого типа

А константы и выражения??

Цитата(MaxxSoftware @ 25.5.2005, 12:15)
сделать массив входным параметром функции

Универсальнее так:
Код

function func (a:array of string):boolean;
var i: integer;
begin
  for i := Low(a) to High(a) do
    // что-то делаешь с a[i]
end;

// использовать

var m1: array[1..20] of string;
      m2: array[-5..+5] of string;
begin
  if a(m1) then ....;
  if a(m2) then ....;
end;

Автор: Yanis 25.5.2005, 13:52
Цитата(Dynamic @ 25.5.2005, 13:41)
А константы и выражения??

Наверное всё равно они имеют тип. Пускай и не явно smile
Добавлено @ 13:53
Константы точно имеют тип, а что за выражения?

Автор: Dynamic 25.5.2005, 14:02
Цитата(Yanis @ 25.5.2005, 13:52)
а что за выражения

Код

ShowMessage('1' + '2');


Хотя вообще-то я прицепился к слову "переменные".
smile

Автор: Петрович 26.5.2005, 07:54
Цитата(MaxxSoftware @ 25.5.2005, 13:15)
пишу примерно что то такое:
function func (a:array [0..10] of string):boolean
ругается на скобки квадратные, убераю диапозон - все одно ругается... вообще можно как то это реализовать?


А суть такова.
Если например определены переменные:
Код

a1,a2 :array [1..10] of Integer;
a3,a4 :array [1..10] of Integer;

То a1 и a2 имеют одинаковый тип и совместимы по присваиванию. А вот a1 и a3 имеют РАЗНЫЙ тип, и по присваиванию НЕ СВМЕСТИМЫ.
А вот если:
Код

type
  ta = array [1..10] of Integer;
  a1 :ta;
  a2 :ta;

Поэтому, если есть:
Код

function func (a:array [0..10] of string):boolean 

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)