<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://camokathomelab.servebeer.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2_%28%D1%82%D0%B8%D0%BF_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%29</id>
	<title>Массив (тип данных) - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://camokathomelab.servebeer.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2_%28%D1%82%D0%B8%D0%BF_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%29"/>
	<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2_(%D1%82%D0%B8%D0%BF_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85)&amp;action=history"/>
	<updated>2026-07-18T09:12:28Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://camokathomelab.servebeer.com/mediawiki/index.php?title=%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2_(%D1%82%D0%B8%D0%BF_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85)&amp;diff=19606&amp;oldid=prev</id>
		<title>imported&gt;Well, Well, Bot!: уборка лишних параметров шаблона {{переход}}</title>
		<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2_(%D1%82%D0%B8%D0%BF_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85)&amp;diff=19606&amp;oldid=prev"/>
		<updated>2026-03-25T08:06:32Z</updated>

		<summary type="html">&lt;p&gt;уборка лишних параметров шаблона {{&lt;a href=&quot;/mediawiki/index.php?title=%D0%A8:%D0%9F%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Ш:Переход (страница не существует)&quot;&gt;переход&lt;/a&gt;}}&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{другие значения|Массив}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Масси́в&amp;#039;&amp;#039;&amp;#039; — [[структура данных]], хранящая набор значений (элементов массива), идентифицируемых по индексу или набору индексов, принимающих целые (или приводимые к целым) значения из некоторого заданного непрерывного диапазона. Одномерный массив можно рассматривать как реализацию [[абстрактный тип данных|абстрактного типа данных]] — вектор. В некоторых [[язык программирования|языках программирования]] массив может называться также таблица, ряд, вектор, матрица.&lt;br /&gt;
&lt;br /&gt;
Размерность массива — это количество индексов, необходимое для однозначной адресации элемента в рамках массива&amp;lt;ref&amp;gt;{{Cite web |url=http://comp.vslovar.org.ru/828.html |title=Дрот В. Л., Новиков Ф. А. «Толковый словарь современной компьютерной лексики», Размерность массива |access-date=2012-10-18 |archive-date=2013-07-03 |archive-url=https://web.archive.org/web/20130703234601/http://comp.vslovar.org.ru/828.html |url-status=live }}&amp;lt;/ref&amp;gt;. По количеству используемых индексов массивы делятся на одномерные, двумерные, трёхмерные и т. д.&lt;br /&gt;
&lt;br /&gt;
Форма или структура массива — сведения о количестве размерностей и размере (протяжённости) массива по каждой из размерностей{{sfn|Бартеньев|2000|cc = 108-109}}; может быть представлена одномерным массивом{{sfn|Магариу|1983|cc = 18-19}}.&lt;br /&gt;
&lt;br /&gt;
Особенностью массива как структуры данных (в отличие, например, от [[Связный список|связного списка]]) является константная [[вычислительная сложность]] доступа к элементу массива по индексу {{sfn|Вирт|1989|loc = 1.6 Массив}}. Массив относится к структурам данных с [[Произвольный доступ|произвольным доступом]].&lt;br /&gt;
&lt;br /&gt;
В простейшем случае массив имеет константную длину по всем размерностям и может хранить данные только одного, заданного при описании, типа. Ряд языков поддерживает также [[динамический массив|динамические массивы]]{{переход|Динамические массивы}}, длина которых может изменяться во время выполнения программы, и гетерогенные массивы{{переход|Гетерогенные массивы}}, которые могут в разных элементах хранить данные различных типов. Некоторые специфичные типы массивов, используемые в различных языках и реализациях — [[ассоциативный массив]], [[дерево отрезков]], [[V-список]], [[параллельный массив]], [[разреженный массив]].&lt;br /&gt;
&lt;br /&gt;
Основные достоинства использования массивов — лёгкость вычисления адреса элемента по его индексу (поскольку элементы массива располагаются один за другим), одинаковое время доступа ко всем элементам, малый размер элементов (они состоят только из информационного поля). &lt;br /&gt;
&amp;lt;br&amp;gt;Среди недостатков — невозможность удаления или добавления элемента без сдвига других при использовании статических массивов, а при использовании динамических и гетерогенных массивов — более низкое быстродействие из-за накладных расходов на поддержку динамики и разнородности. При работе с массивами с реализацией по типу языка Си (с указателями) и отсутствии дополнительных средств контроля типичной ошибкой времени выполнения является угроза выхода за границы массива и повреждения данных.&lt;br /&gt;
&lt;br /&gt;
== Варианты реализации ==&lt;br /&gt;
Массив — упорядоченный набор элементов, каждый из которых хранит одно значение, идентифицируемое с помощью одного или нескольких индексов. В простейшем случае массив имеет постоянную длину и хранит единицы данных одного и того же типа, а в качестве индексов выступают целые числа.&lt;br /&gt;
&lt;br /&gt;
Количество используемых индексов массива может быть различным: массивы с одним индексом называют одномерными, с двумя — двумерными, и так далее. Одномерный массив — нестрого соответствует [[Вектор (математика)|вектору]] в математике; двумерный («строка», «столбец») — [[Матрица (математика)|матрице]]. Чаще всего применяются массивы с одним или двумя индексами; реже — с тремя; ещё большее количество индексов — встречается крайне редко.&lt;br /&gt;
&lt;br /&gt;
Первый элемент массива, в зависимости от [[язык программирования|языка программирования]], может иметь различный индекс. Различают три основных разновидности массивов: с отсчётом от нуля ({{lang-en2|zero-based}}), с отсчётом от единицы ({{lang-en2|one-based}}) и с отсчётом от специфического значения заданного программистом ({{lang-en2|n-based}}). Отсчёт от нуля более характерен для [[Низкоуровневый язык программирования|низкоуровневых языков программирования]], хотя встречается и в языках высокого уровня, например, используется почти во всех языках семейства Си. В ряде языков ([[Паскаль (язык программирования)|Паскаль]], [[Ада (язык программирования)|Ада]], [[Модула-2]]) диапазон индексов может определяться как произвольный диапазон значений любого типа данных, приводимого к целому, то есть целых чисел, символов, перечислений, даже логического типа (в последнем случае массив имеет два элемента, индексируемых значениями «Истина» и «Ложь»).&lt;br /&gt;
&lt;br /&gt;
;Пример фиксированного массива на языке Паскаль&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
    {Одномерный массив целых чисел.&lt;br /&gt;
     Нумерация элементов от 1 до 15} &lt;br /&gt;
  a: array [1..15] of Integer;&lt;br /&gt;
    {Двумерный массив символов.&lt;br /&gt;
     Нумерация по столбцам по типу Byte (от 0 до 255)&lt;br /&gt;
     по строкам от 1 до 5}&lt;br /&gt;
  multiArray : array [Byte, 1..5] of Char; &lt;br /&gt;
    {Одномерный массив из строк.&lt;br /&gt;
     Нумерация по типу word (от 0 до 65536)}&lt;br /&gt;
  rangeArray : array [Word] of String;   &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Пример фиксированного массива на Си&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
  int Array[10];         // Одномерный массив: целых чисел, размера 10;&lt;br /&gt;
                         // Нумерация элементов — от 0 до 9.&lt;br /&gt;
                         &lt;br /&gt;
  double Array[12][15];  // Двумерный массив: &lt;br /&gt;
                         // вещественных чисел двойной точности, &lt;br /&gt;
                         // размера 12 на 15;&lt;br /&gt;
                         // Нумерация: по строкам — от 0 до 11, &lt;br /&gt;
                         // по столбцам — от 0 до 14.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В некоторых языках программирования многомерные массивы создаются на основе одномерных, у которых элементы являются массивами&amp;lt;ref name=&amp;quot;McMillan2014&amp;quot;&amp;gt;{{книга |заглавие=Data Structures and Algorithms with JavaScript |ссылка=https://books.google.com/books?id=1ywEAwAAQBAJ&amp;amp;pg=PA30 |издательство=[[O’Reilly|O’Reilly Media]] |isbn=978-1-4493-7396-2 |страницы=30—32 |язык=en |автор=Michael McMillan |день=10 |месяц=3 |год=2014}}&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
; Пример двумерного массива на JavaScript&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    //Создание двумерного массива чисел: &lt;br /&gt;
    var array = [&lt;br /&gt;
        [11, 12, 13, 14, 15, 16], // Первая строка-массив&lt;br /&gt;
        [21, 22, 23, 24, 25, 26], // Вторая&lt;br /&gt;
        [31, 32, 33, 34, 35, 36]  // Третья&lt;br /&gt;
    ];&lt;br /&gt;
    &lt;br /&gt;
    // Вывод массива на консоль:&lt;br /&gt;
    array.forEach((subArray) =&amp;gt; {   // Для каждого под-массива,&lt;br /&gt;
       subArray.forEach((item) =&amp;gt; { // для каждого его элемента,&lt;br /&gt;
           console.log(item);       // — вывести этот элемент на консоль.&lt;br /&gt;
       });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поддержка индексных массивов (свой синтаксис объявления, функции для работы с элементами и так далее) есть в большинстве [[язык программирования высокого уровня|высокоуровневых языков программирования]]. Максимально допустимая размерность массива, типы и диапазоны значений индексов, ограничения на типы элементов определяются языком программирования или конкретным [[транслятор]]ом.&lt;br /&gt;
&lt;br /&gt;
В языках программирования, допускающих объявления программистом собственных [[тип данных|типов]], как правило, существует возможность создания типа «массив». В определении такого типа задаются типы и/или диапазоны значений каждого из индексов и тип элементов массива. Объявленный тип в дальнейшем может использоваться для определения переменных, формальных параметров и возвращаемых значений функций. Некоторые языки поддерживают для переменных-массивов операции присваивания (когда одной операцией всем элементам массива присваиваются значения соответствующих элементов другого массива).&lt;br /&gt;
&lt;br /&gt;
;Объявление типа «массив» в языке Паскаль&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
  type&lt;br /&gt;
    TArrayType = array [0..9] of Integer; &lt;br /&gt;
    (* Массивы, имеющие заданные параметры:&lt;br /&gt;
        1. Размер — 10 ячеек; &lt;br /&gt;
        2. Тип элементов, пригодных для хранения — &lt;br /&gt;
                — целые числа диапазона [−32 768; 32 767],&lt;br /&gt;
        — объявляются типом операндов, называющимся &amp;quot;TArrayType&amp;quot;. *)&lt;br /&gt;
&lt;br /&gt;
  var&lt;br /&gt;
    arr1, arr2, arr3: TArrayType; &lt;br /&gt;
    (* Объявление трёх переменных-массивов одного типа &lt;br /&gt;
        (вышеуказанного &amp;quot;TArrayType&amp;quot;). *)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В языке программирования [[APL (язык программирования)|APL]] массив является основным типом данных (при этом нуль-мерный массив называется скаляром, одномерный — вектором, двумерный — матрицей){{sfn|Магариу|1983}}. Помимо присваивания массивов в этом языке поддерживаются операции векторной и матричной арифметики, каждая из которых выполняется одной командой, операции сдвига данных в массивах, сортировка строк матрицы.&lt;br /&gt;
&lt;br /&gt;
== Динамические массивы ==&lt;br /&gt;
{{main|Динамический массив}}&lt;br /&gt;
Динамическими называются массивы, размер которых может изменяться во время выполнения программы. Обычные (не динамические) массивы называют ещё &amp;#039;&amp;#039;фиксированными&amp;#039;&amp;#039; или &amp;#039;&amp;#039;статическими&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Динамические массивы могут реализовываться как на уровне языка программирования, так и на уровне системных библиотек. Во втором случае динамический массив представляет собой объект стандартной библиотеки, и все операции с ним реализуются в рамках той же библиотеки. Так или иначе, поддержка динамических массивов предполагает наличие следующих возможностей:&lt;br /&gt;
# Описание динамического массива. На уровне языка это может быть специальная синтаксическая конструкция, на уровне библиотеки — библиотечный тип данных, значение которого объявляется стандартным образом. Как правило, при описании (создании) динамического массива указывается его начальный размер, хотя это и не обязательно.&lt;br /&gt;
# Операция определения текущего размера динамического массива.&lt;br /&gt;
# Операция изменения размера динамического массива.&lt;br /&gt;
&lt;br /&gt;
Пример конструкций для работы с динамическими массивами на [[Delphi (язык программирования)|Delphi]]:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
var  // Описания динамических массивов&lt;br /&gt;
  byteArray  : Array of Byte;           // Одномерный массив&lt;br /&gt;
  multiArray : Array of Array of string;  // Многомерный массив&lt;br /&gt;
...&lt;br /&gt;
  SetLength(byteArray, 1); // Установка размера массива в 1 элемент.&lt;br /&gt;
  byteArray[0] := 16;       // Запись элемента.&lt;br /&gt;
  SetLength(byteArray, Length(byteArray)+1); // Увеличение размера массива на единицу&lt;br /&gt;
  byteArray[Length(byteArray) - 1] := 10;    // Запись значения в последний элемент.&lt;br /&gt;
  WriteLn(byteArray[Length(byteArray) - 1]); // Вывод последнего элемента массива. &lt;br /&gt;
...&lt;br /&gt;
  SetLength(multiArray, 20, 30); // Установка размера двумерного массива&lt;br /&gt;
  multiArray[10,15] := 12;       // Запись значения&lt;br /&gt;
  SetLength(multiArray, 10, 15); // Уменьшение размера &lt;br /&gt;
  WriteLn(Length(multiArray), &amp;#039;  &amp;#039;, Length(multiArray[0])  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Гетерогенные массивы ==&lt;br /&gt;
&amp;#039;&amp;#039;Гетерогенным&amp;#039;&amp;#039; называется массив, в разные элементы которого могут быть непосредственно записаны значения, относящиеся к различным [[тип данных|типам данных]]. Массив, хранящий [[указатель (тип данных)|указатели]] на значения различных типов, не является гетерогенным, так как собственно хранящиеся в массиве данные относятся к единственному типу — типу «указатель». Гетерогенные массивы удобны как универсальная структура для хранения наборов данных произвольных типов. Реализация гетерогенности требует усложнения механизма поддержки массивов в трансляторе языка. В ряде языков программирования гетерогенные массивы называются записями.&amp;lt;ref&amp;gt;{{Cite web|url=https://studfile.net/preview/10097283/page:9/|title=1.9. Массивы и записи|lang=ru|website=StudFiles|access-date=2025-03-25}}&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Работа с памятью ==&lt;br /&gt;
Типовым способом реализации статического гомогенного (хранящего данные одного типа) массива является выделение непрерывного блока памяти объёмом &amp;lt;math&amp;gt;S \cdot m_1 \cdot m_2 \cdot \dots m_n&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; — размер одного элемента, а &amp;lt;math&amp;gt;m_1, \dots m_n&amp;lt;/math&amp;gt; — размеры диапазонов индексов (то есть количество значений, которые может принимать соответствующий индекс). При обращении к элементу массива с индексом &amp;lt;math&amp;gt;(i_1, i_2, \dots i_n)&amp;lt;/math&amp;gt; адрес соответствующего элемента вычисляется как &amp;lt;math&amp;gt;B+S\cdot \left(\left(\dots\left(i_\text{1p}m_1 + i_\text{2p}\right) \cdot m_2 + \dots +i_{(n-1)\text{p}} \right) \cdot m_{n-1} + i_{n\text{p}}\right)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; — база (адрес начала блока памяти массива), &amp;lt;math&amp;gt;i_{k\mathrm p}&amp;lt;/math&amp;gt; — значение &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-го индекса, приведённое к целому с нулевым начальным смещением. Порядок следования индексов в формуле вычисления адреса может быть различным. (Этот способ соответствует реализации в большинстве компиляторов языка [[Си (язык программирования)|Си]]; в [[Фортран]]е порядок индексов противоположен{{sfn|Бартеньев|2000|сс = 108-112}}).&lt;br /&gt;
&lt;br /&gt;
Таким образом, адрес элемента с заданным набором индексов вычисляется так, что время доступа ко всем элементам массива с теоретической точки зрения одинаково; однако, могут сказываться различные значения задержек отклика от оперативной памяти к ячейкам, расположенным на разных элементах памяти, но в практике высокоуровневого программирования такими тонкостями, за редкими исключениями, пренебрегают.&lt;br /&gt;
&lt;br /&gt;
Обычным способом реализации гетерогенных массивов является отдельное хранение самих значений элементов и размещение в блоке памяти массива (организованного как обычный гомогенный массив, описанный выше) указателей на эти элементы. Поскольку указатели на значения любых типов, как правило, имеют один и тот же размер, удаётся сохранить простоту вычисления адреса, хотя возникают дополнительные накладные расходы на размещение значений элементов и обращение к ним.&lt;br /&gt;
&lt;br /&gt;
Для динамических массивов может использоваться тот же механизм размещения, что и для статических, но с выделением некоторого объёма дополнительной памяти для расширения и добавлении механизмов изменения размера и перемещения содержимого массива в памяти.&lt;br /&gt;
&lt;br /&gt;
Также динамические и гетерогенные массивы могут реализовываться путём использования принципиально иных методов хранения значений в памяти, например, одно- или двухсвязных списков. Такие реализации могут быть более гибкими, но требуют, как правило, дополнительных накладных расходов. Кроме того, в них обычно не удаётся выдержать требование константного времени доступа к элементу.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
{{примечания}}&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
* {{книга |заглавие=Алгоритмы и структуры данных|оригинал=Algoritms and data structure|автор=Вирт Н.|место=М. |издательство=Мир |год=1989 |страниц=360|isbn=5-03-001045-9|ref=Вирт}}&lt;br /&gt;
* {{книга|автор=Магариу Н. А.|заглавие=Язык программирования АПЛ|издательство=«Радио и связь»|год=1983|место=М.|страниц=96|ref=Магариу}}&lt;br /&gt;
* {{книга|автор=Бартеньев О. В.|заглавие=Современный Фортран|издание=3-е изд., доп. и перераб.|место=М.|издательство=Диалог-МИФИ|год=2000|страниц=449|ref=Бартеньев}}&lt;br /&gt;
&lt;br /&gt;
{{Структуры данных}}&lt;br /&gt;
{{Типы данных}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Структуры данных]]&lt;br /&gt;
[[Категория:Составные типы данных]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Well, Well, Bot!</name></author>
	</entry>
</feed>