Введение

Способ обращения к элементам массивов или тензоров – индексная нотация, или индексиальная нотация в теории относительности и абстрактной алгебре. В математике и программировании индексная нотация используется для обозначения элементов массива чисел. Формализм использования индексов различается в зависимости от области применения. В частности, существуют разные способы обращения к элементам списка, вектора или матрицы, в зависимости от того, составляется ли формальная математическая публикация или пишется компьютерная программа.

В математике

Часто в математике бывает полезно обращаться к элементам массива, используя индексы. Индексы могут быть целыми числами или переменными. Массив в общем случае принимает форму тензора, поскольку тензоры можно рассматривать как многомерные массивы. Частными (и более привычными) случаями являются векторы (одномерные массивы) и матрицы (двумерные массивы). Приведенное ниже – лишь введение в данную концепцию: индексная запись используется более детально в математике (особенно при представлении и выполнении операций с тензорами). Более подробную информацию можно найти в основной статье.

Многомерные массивы

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

В вычислительной технике

В нескольких языках программирования индексная нотация — это способ обращения к элементам массива. Этот метод используется, поскольку он наиболее близок к реализации на языке ассемблера, где адрес первого элемента используется как база, а кратное (индекс) размера элемента — для адресации внутри массива. Например, если массив целых чисел хранится в области памяти компьютера, начиная с ячейки памяти с адресом 3000 (базовый адрес), и каждое целое число занимает четыре ячейки (байта), то элементы этого массива расположены по адресам памяти 0x3000, 0x3004, 0x3008, …, 0x3000 + 4(n − 1) (обратите внимание на нулевую индексацию). В общем случае, адрес i-го элемента массива с базовым адресом b и размером элемента s равен b + i * s.

Подробности реализации

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

На других языках

В других языках программирования, таких как Паскаль, индексы могут начинаться с 1, поэтому индексацию в блоке памяти можно изменить, чтобы она соответствовала схеме нумерации с 1, применив простое линейное преобразование. В этой схеме, адрес в памяти i-го элемента с базовым адресом b и размером элемента s будет равен b + (i − 1)s.