OberonCore
https://forum.oberoncore.ru/

Динамические многомерные массивы выделяются одним блоком
https://forum.oberoncore.ru/viewtopic.php?f=2&t=3988
Страница 1 из 1

Автор:  Евгений Темиргалеев [ Воскресенье, 10 Июнь, 2012 11:15 ]
Заголовок сообщения:  Динамические многомерные массивы выделяются одним блоком

У меня была отложена в закорках "сишная" схема, подразумевал, что и тут (ББ/КП) так же; даже проверить в голову не приходило:
Код:
MODULE PrivTest;

   IMPORT Log, SYSTEM;
   
   PROCEDURE Do* (a, b: INTEGER);
      VAR   p: POINTER TO ARRAY OF ARRAY OF INTEGER; i, j, base: INTEGER;
   BEGIN
      NEW(p, a, b);
      i := 0;
      base := SYSTEM.ADR(p^);
      WHILE i < LEN(p) DO
         j := 0;
         WHILE j < LEN(p[i]) DO
            Log.Int(SYSTEM.ADR(p[i, j]) - base);
            INC(j)
         END;
         Log.Ln;
         INC(i)
      END
   END Do;
   
END PrivTest.
^Q "PrivTest.Do(2, 3)"
Код:
  0 4 8
 12 16 20

Автор:  Info21 [ Воскресенье, 10 Июнь, 2012 11:58 ]
Заголовок сообщения:  Re: Динамические многомерные массивы выделяются одним блоком

Вы бы оснащали чиселки интерпретацией.

А то требуется пусть маленькое, но ненужное усилие и потеря времени, чтобы понять (тем, кто это знал всегда), что тут речь о том, что ... некоторые знали всегда :)

Автор:  Роман М. [ Воскресенье, 10 Июнь, 2012 12:50 ]
Заголовок сообщения:  Re: Динамические многомерные массивы выделяются одним блоком

Ну да. А в чём новость?

Автор:  Валерий Лаптев [ Воскресенье, 10 Июнь, 2012 14:30 ]
Заголовок сообщения:  Re: Динамические многомерные массивы выделяются одним блоком

Да. А как иначе? Память-то линейная. Поэтому вся "многомерность" - это вычисление соответствующих индексов на строке элементов... :)

Автор:  QWERTYProgrammer [ Воскресенье, 10 Июнь, 2012 14:45 ]
Заголовок сообщения:  Re: Динамические многомерные массивы выделяются одним блоком

Валерий Лаптев писал(а):
Да. А как иначе? Память-то линейная. Поэтому вся "многомерность" - это вычисление соответствующих индексов на строке элементов... :)

Т.е. нет отличия от C?

Автор:  Valery Solovey [ Воскресенье, 10 Июнь, 2012 17:07 ]
Заголовок сообщения:  Re: Динамические многомерные массивы выделяются одним блоком

Евгений Темиргалеев писал(а):
Код:
  0 4 8
 12 16 20

Так а что Вы хотели сказать?

Автор:  Евгений Темиргалеев [ Воскресенье, 10 Июнь, 2012 19:52 ]
Заголовок сообщения:  Re: Динамические многомерные массивы выделяются одним блоком

Хотел сказать, что мне долгое время казалось одно, а реально было другое. Пережитки сей в голове. Насчёт "сишной" схемы --- посмотрите какие примеры попадаются при поиске "динамический двумерный массив в си". Например тут: http://citforum.ru/programming/cpp_march/cpp_059.shtml
Много "на виду" примеров с линеаризацией?

Автор:  Valery Solovey [ Понедельник, 11 Июнь, 2012 00:31 ]
Заголовок сообщения:  Re: Динамические многомерные массивы выделяются одним блоком

А, всё, теперь понятно. А то название темы вкупе с первым предложением как-то запутывало. Почему-то показалось, что в Си оно выделяется одним блоком, а в Обероне - непонятно.

В Си, подозреваю, тоже можно одним блоком выделять. x*y ячеек памяти выделить в new, а затем каждый из x указателей выставить в правильную позицию выделенного блока памяти.

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