Структуры массивов могут содержать строки, которые могут иметь различную длину (и, следовательно, разные размеры в памяти).Как это возможно? - PullRequest
0 голосов
/ 16 февраля 2019

Я изучаю структуру данных. Я узнал о массиве, что все элементы должны быть одинакового размера.Так, например, если существует массив A, содержащий целые числа, а целое число занимает 4 байта. Если базовый адрес массива A равен X, то мы можем вычислить адрес n-го элемента, добавив базовый адрес + (n-1) * размер элемента.

Например, адрес 2-го элемента = X + b адрес 3-го элемента = X + 2b

Если мы рассмотрим массив строк, то как работает приведенная выше формула, поскольку размер строки не фиксирован.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

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

0 голосов
/ 16 февраля 2019

В современных языках программирования типы данных String реализованы в виде объектов, а массив Strings на самом деле представляет собой массив ссылок (указатели, если хотите) на объекты String, а ссылки имеют фиксированный тип,известный размер.

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

...