Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 18 июн 2025, 16:55

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Массивы
СообщениеДобавлено: 23 май 2017, 19:57 
Не в сети

Сообщения: 116
Откуда: Каменск-Уральский
Чем открытый массив отличается от динамического?


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Массивы
СообщениеДобавлено: 23 май 2017, 21:43 
Не в сети
Администратор
Аватара пользователя

Сообщения: 273
Откуда: Россия
Открытый массив - это массив, у которого не указан размер. Это особый тип данных, который может быть использован не обязательно для выделения участка памяти (чтобы создать динамический массив), а например, для указания типа формального параметра. Частный случай открытого массива - строковой тип (ARRAY OF CHAR). Если формальный параметр процедуры имеет тип ARRAY OF CHAR, то при вызове фактический параметр может быть, например, константой "QWERTY" (которая явно не является динамическим массивом). Так что, открытый и динамический - это свойства из разных областей (как кислое отличается от тёплого :) ). Открытый или фиксированный массив говорит о том, заданы или нет границы для типа данных. А статический или динамический говорит о механизме хранения элементов массива - статический создается\уничтожается автоматически в начале работы модуля или процедуры, а динамический создается в любой момент по указанию программиста (и автоматически уничтожается сборщиком мусора после того, как исчезнет последний указатель на этот массив). Например
Код: "OBERON"
  1. TYPE
  2. Arr10 = ARRAY 10 OF INTEGER; (* тип-фиксированный массив *)
  3. Arr = ARRAY OF INTEGER; (* тип - открытый массив*)
  4. VAR
  5. a:Arr10; (* Статическая переменная *)
  6. b:POINTER TO Arr10; (* Указатель на фиксированный массив *)
  7. c:POINTER TO Arr; (* Указатель на открытый массив *)
  8.  
  9. ...
  10. a[5]:=34;
  11. NEW(b); (* создать динамический массив на основе фиксированного*)
  12. b[5]:=21; (* сокращение от b^[5]:=21; *)
  13. NEW(c,15); (* создать динамический массив на основе открытого *)
  14. c[12]:=44; (* сокращение от c^[12]:=44; *)
  15.  


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club