Оберон-клуб «ВЄДАsoft»
https://zx.oberon.org/forum/

Возвращение массива из процедуры
https://zx.oberon.org/forum/viewtopic.php?f=79&t=339
Страница 1 из 1

Автор:  Len [ 07 дек 2017, 15:28 ]
Заголовок сообщения:  Возвращение массива из процедуры

Допустим мне надо вернуть из процедуры массив как параметр. Я сочинил следующее:
Код: "OBERON"
  1. TYPE
  2. pow = POINTER TO RECORD
  3. a, b: INTEGER
  4. END;
  5.  
  6. pow2 = ARRAY OF pow;
  7.  
  8. pow3 = POINTER TO pow2;


Далее такой заголовок процедуры
Код: "OBERON"
  1. PROCEDURE a(): pow3;
  2. VAR z: pow3;


Подскажите как объявить массив в z и как вообще этой переменной пользоваться.

Автор:  Zorko [ 07 дек 2017, 23:05 ]
Заголовок сообщения:  Re: Возвращение массива из процедуры

Тип pow3 — это указатель на динамический массив, элементы которого — указатели на запись. Нужно всё делать по очереди. Сначала выделить память для самого массива, указав количество его элементов (указателей на запись). Потом пробежаться по элементам массива, выделяя непосредственно память под каждую запись.
Код: "OBERON"
  1. PROCEDURE a(): pow3;
  2. VAR z: pow3; i: INTEGER;
  3. BEGIN
  4. NEW(z, 100); (* Объявляем массив длиной в 100 элементов *)
  5. FOR i := 0 TO 99 DO (* Перебираем все его элементы в цикле *)
  6. NEW(z[i]); (* Выделяем память под элемент массива (запись) *)
  7. z[i].a := 1; z[i].b := 2; (* Присваиваем этой записи значение её полей *)
  8. END;
  9. RETURN z
  10. END a;

Может стоит упростить? Например, сделать элементы массива (записи) статическими.

Страница 1 из 1 Часовой пояс: UTC + 2 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/