В C массив - это область непрерывного хранения фиксированного размера, содержащая несколько объектов, один за другим. Этот массив является «объектом» в значении, которое С дает слову - в основном, просто некоторая память, которая представляет что-то. Объект может быть просто int
.
Вы можете немного различать массив объектов и массив типов . Часто люди используют массив объектов , которые выделяются с помощью malloc
и используются через указатель на первый элемент. Но C также имеет специфические типы для массивов разных размеров, а также для массивов переменной длины, размер которых устанавливается при их создании. У VLA есть немного вводящее в заблуждение имя: размер является только «переменным» в том смысле, что он не фиксируется во время компиляции. Это не может измениться в течение жизни объекта.
Итак, когда я говорю, что массив имеет фиксированный размер, я имею в виду, что размер не может измениться после создания массива, и это включает в себя VLA. Существует realloc
, который логически возвращает указатель на новый массив, который заменяет старый, но иногда может возвращать тот же переданный адрес, изменив размер массива на месте. realloc
работает с распределением памяти, а не с массивами вообще.
Вот что такое массив. Язык программирования C не определяет ничего, называемого списком. На самом деле не может сравнить что-то, что хорошо определено, с чем-то, что не определено ;-) Обычно «список» означает связанный список , но в некоторых контекстах или в других языках это означает другие вещи.
В этом отношении «массив» в других языках может означать другие вещи, хотя я не могу сразу думать о языке, где он означает что-то очень отличное от массива C.
Если ваш вопрос на самом деле не имеет ничего общего с C и является вопросом структуры данных, не зависящим от языка, «в чем разница между массивом и связанным списком?», То это дубликат этого:
Массив и связанный список