A null
обычно представляется в памяти всеми битами, равными нулю. Это верно независимо от того, хранится ли null
в массиве или где-либо еще.
Я думаю, что в вашем вопросе относительно того, что такое массив, есть некоторая путаница. Массив - это последовательность фиксированной длины, где каждый элемент в последовательности имеет одинаковый тип. Длина массива определяется при создании массива, и его нельзя изменить позже (хотя вы можете создать новый массив другой длины, если это необходимо).
Выше вы получите любой учебник, но имейте в виду, что некоторые языки, такие как Javascript и PHP, используют слово «массив» для обозначения вещей, которые являются , а не массивами. Javascript «массив» - это действительно список , а PHP «массив» - это действительно странный гибрид между списком и ассоциативным массивом . Python list
не является массивом, хотя некоторые источники ошибочно называют его одним. Все эти другие структуры данных позволяют вставлять элемент в индекс, но «вставить элемент» не является операцией над массивом, поскольку для этого потребуется увеличить длину массива на 1. Единственное Операции над массивами заключаются в том, чтобы получить значение по индексу, установить значение по индексу и (если это массив с префиксом длины) получить длину массива. Вы можете использовать массив для представления последовательности переменной длины, но вы не должны путать массив с тем, что он представляет.
Не существует специальной обработки null
в отношении места памяти; если массив имеет null
в индексе 1, то область памяти, соответствующая индексу 1, содержит представление памяти null
. Весь смысл массива состоит в том, что каждый индекс соответствует определенному месту в памяти, поэтому вы можете использовать этот индекс для непосредственного определения места в памяти. Формула для адреса памяти элемента массива:
(адрес для array[index]
) = (адрес array
start) + index
* (байт на элемент массива)
Если элемент с индексом 1 не занимает ячейку памяти, то элемент с индексом 2 не будет в нужном месте в соответствии с этой формулой.
Естественный последующий вопрос: если null
в массиве представлен в памяти так же, как число 0
, как программа может определить, является ли значение null
или 0
?
Поскольку все элементы массива должны быть одного и того же типа, null
в массиве имеет смысл, только если элементы массива являются ссылками , а не примитивными целыми числами. Например, в Java вы можете иметь null
в массиве Integer[]
, но не массив int[]
. Таким образом, нулевые биты, представляющие null
, не следует путать с нулевыми битами, представляющими число 0
, поскольку любой, читающий массив ссылок, должен интерпретировать содержимое как ссылки, а не как целые числа; и любой, кто читает массив примитивных целых чисел, должен интерпретировать эти биты как число 0
, а не как ссылку null
.