В чем разница между структурой данных Array и типом данных Array в контексте такого языка программирования, как C? - PullRequest
5 голосов
/ 04 декабря 2011

Википедия различает Структура данных массива и Тип данных массива .

В чем разница между структурой данных Array и типом данных Array в контексте такого языка программирования, как C?

Что это: int array[]={1, 2, 3, 4, 5};?

Это структура данных массива или тип данных массива? Почему?

Ответы [ 4 ]

5 голосов
/ 04 декабря 2011

Краткий ответ: Сделайте себе одолжение и просто проигнорируйте обе статьи.Я не сомневаюсь в благих намерениях авторов, но статьи в лучшем случае сбивают с толку.

Что это такое: int array[]={1, 2, 3, 4, 5};?

Это структура данных массива илитипа данных массива?Почему?

Это оба.Предполагается, что структура данных массива , обсуждаемая в статье под таким именем, должна относиться конкретно к массивам, реализованным в C. Концепция типа данных array должна быть более абстрактной, но для массивов Cбезусловно, это одна реализация массива данных типа .

Длинный ответ: Разница, рассматриваемая в этих двух статьях, заключается в разнице между поведением и реализацией.Как используется в статьях, структура данных массива относится к элементам, хранящимся последовательно в памяти, так что вы можете вычислить адрес любого элемента по:

address = (base address) + (element index * size of a single element)

, где «базовый адрес» равенадрес элемента с индексом 0.

Тип данных массива , с другой стороны, относится к любому типу данных, который обеспечивает логическую последовательность элементов, к которым обращается индекс.Например, C ++ предоставляет std :: vector, а Objective-C предоставляет NSArray и NSMutableArray, ни один из которых, скорее всего, не будет реализован как непрерывная последовательность элементов в памяти.

Терминология, используемая в статьях isn 'очень полезно.Определение, данное в верхней части структуры данных массива статья:

структура данных массива или просто массив - это структура данных, состоящая из набора элементов (значений или переменных), каждый из которых идентифицирован по крайней мере одним индексом

, в то время как определение, данное для тип данных массива :

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

. Не помогает, что данные массива В статье struct , которая, по-видимому, должна относиться к реализации массивов в стиле C, содержится обсуждение ассоциативных массивов и другого материала, который был бы гораздо более уместным в статье типа данных массива *1052*.Вы можете узнать, почему это так, прочитав страницу обсуждения , в частности Предложение о разделении статьи и Структура массива .Единственное, что ясно в этих статьях, - это то, что разные авторы не могут определиться с тем, как следует определять и объяснять «массив».

4 голосов
/ 04 декабря 2011

A type - это то, что видит программист; структура данных - это то, как что-то реализовано за кулисами.Вполне возможно, что тип массива реализуется за кулисами, например, с помощью хеш-таблицы (я думаю, это относится к PHP).

В C нет различий;тип массива должен быть реализован с непрерывным блоком памяти.

0 голосов
/ 04 декабря 2011

Скобки [] - это способ определения типа данных Array в C

Similary, * - это способ обозначения указателя типа данных в C

int array[]={1, 2, 3, 4, 5}; является примером структуры данных массива в C

В частности, вы определили структуру данных, в которой расположены 5 целых чисел, вы выделили достаточно памяти в стеке для этой структуры данных и инициализировали эту структуру данных со значениями 1, 2, 3, 4, 5.

A Структура данных в C имеет ненулевой размер, который можно найти, вызвав sizeof () для экземпляра этой структуры.

0 голосов
/ 04 декабря 2011

Структура вашего массива определяет способ его реализации (хранение и доступ), тип данных относится к типам данных, содержащихся в массиве.Для удобства чтения прочитайте каждую из этих ссылок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...