Обсуждение:Массив (тип данных)

Последнее сообщение: 7 лет назад от РоманСузи в теме «Массив <-> список»

Индексный массив править

Не является ли более правильным (и более часто употребимым) применение термина "Индексируемый массив" в качестве синонима массива, а термина "Индексный массив" - как описание массива, в котором находятся некоторые другие индексы? ram3ai 10:12, 9 января 2008 (UTC)

 * Статический массив это массив,располагающийся в особом сегменте программы. Лучше подходит "фиксированный". Или "с фиксированной размерностью".

188.234.170.249 11:47, 19 апреля 2014 (UTC) СергейОтветить

Ошибка? править

int **array2; // Многомерный массив
...
array2=(int**)malloc(16*sizeof(int));


Разве это корректный код? По-моему, правильно так:


array2=(int**)malloc(16*sizeof(int*));


195.131.84.202 20:37, 13 июня 2009 (UTC)Ответить

Ассоциативный массив править

Полагаю, что не нужно убирать небольшой абзац об этом типе данных, даже если его "массивость" скрыта где-то в пучинах Лиспа, а другие реализации совсем непохожи на обычный массив. РоманСузи 18:41, 31 марта 2013 (UTC)Ответить

Я считаю, что между ассоциативным массивом и обычным массивом столько же общего, сколько между JavaScript и Java. algolist.manual.ru — вот АИ, где утверждают, что массив — это либо доступ только по номеру элемента, либо последовательное хранение данных. Хэш-сеты же это доступ по любому ключу и хранение данных динамического размера.
Про Лисп: во-первых, определение массива не должно быть завязано на какой-то конкретный язык, а, во-вторых, я не смог понять о какой реализации Лиспа идёт речь. Vorval_0 14:52, 23 ноября 2014 (UTC)Ответить
OK. Убедили. РоманСузи 15:27, 23 ноября 2014 (UTC)Ответить

Стоит ли проверять на удачное выделение памяти? править

В "Пример динамического массива на Си":


  array1 = (float*) malloc(10 * sizeof(float)); // выделение 10 блоков по sizeof(float) байт каждый 
  array2 = (int**) malloc(16 * sizeof(int*));   // выделение 16 блоков по sizeof(int*) байт каждый. Сюда будут записаны указатели на одномерные массивы-строки
  for(i = 0; i < 16; ++i)
       array2[i] = (int*) malloc(8 * sizeof(int)); // выделение 8 блоков по sizeof(int) байт каждый. Это одномерные массивы - строки матрицы.
  // Обращение к массиву
  array1[i] = 5.0;      // Записи эквивалентны.

Может стоит проверять, выделена ли память (array2 != NULL, array2[i] != NULL, array1 != NULL) , или пропустим для наглядности? --93.84.1.22 19:07, 26 октября 2013 (UTC)Ответить

Или я не правильно понимаю или это ошибка править

Как понять: "При обращении к элементу массива A[i1, i2, i3, …, in] адрес соответствующего элемента вычисляется как B+S*((…(i1p*m1+i2p)*m2+…+i(n-1)p)*mn-1+inp), где B — база (адрес начала блока памяти массива), ikp — значение k-го индекса, приведённое к целому с нулевым начальным смещением." Dhcpcd (обс) 04:49, 22 сентября 2016 (UTC)Ответить

Массив <-> список править

Мне кажется, определение массива как противоположность списку слегка устарело, лет на двадцать-тридцать. Так, в языке C# есть понятие "Array" (массив), его размер фиксирован. Есть понятие "List" (список), это в принципе то же самое, только его размер можно изменять динамически (например, добавить или удалить элемент в произвольном месте). Обращение по произвольному адресу ничем не отличается от случая массива.

И вообще, внутри список в C# (реализация Майкрософт) представлен массивом; просто при необходимости увеличить размер выделяется новый (бОльший и непрерывный) фрагмент памяти, все "старые" элементы копируются на новое место, обновляется ссылка и "старый" фрагмент памяти высвобождается.

--Adams13 (обс.) 19:57, 15 ноября 2016 (UTC)Ответить

  • От того, что кто-то назвал одно другим или что с помощью чего реализовано не меняет дела. Однако, так как о связи массива и списка в самой статье не сказано, из преамбулы можно убрать. Только вот источник нужно проверить, к чему он относился. РоманСузи (обс.) 22:05, 15 ноября 2016 (UTC)Ответить