Почему индексы массива равны нулю на большинстве языков программирования?

C ++, C #, C, D, Java, … основаны на нуле.

Matlab – единственный язык, который я знаю, который начинается с 1.

Массивы равны нулю на основе c и c ++, поскольку представляют смещение от начала списка элемента.

Эти две строки имеют одинаковый результат в c.

anArray[3] = 4; *(anArray +3) = 4; 

Первый – это стандартный указатель, второй – указатель, добавляет три к id, а затем дешифрует его. Это то же самое, что и индекс.

Я думаю, потому что массивы используют арифметику указателя для обозначения некоторого значения. В основном массивы имеют непрерывную память, и если вы хотите сослаться на 5-й элемент (a [4]), тогда будет выполнен размер int + 4 *

Скажем, если вы начинаете с 1, то для обращения к 5-му элементу вам нужно будет сделать что-то вроде + (5-1) * размера int

Хорошо, рассмотрим знаменитую статью Дейкстры: « Нумерация должна начинаться с нуля . Он утверждает, что нумерация должна начинаться с 0, потому что это означает, что действительные индексы в массиве могут быть описаны как 0 <= i < N . Это явно более привлекательно, чем 1 <= i < N + 1 , на эстетическом уровне.

(Можно спросить: «Почему бы не сказать 0 < i <= N », но он снова возражает против этого по эстетическим соображениям.)

Я предполагаю, что это имеет главным образом исторические причины, новые языки просто пытаются использовать существующее соглашение, с которым знакомы программисты.

Старые языки, из которых возникло это правило, были близки к металлу, а индекс действительно является расстоянием от исходного элемента, поэтому 0 имеет смысл для первого элемента.

Вероятно, «С» получил его, потому что он более эффективен. Чтобы вычислить адрес элемента в массиве, основанном на 0, достаточно указать несколько индексов по ItemSize, для массива на основе 1 вам нужно вычислить (Index-1) * ItemSize. «C», а затем «C ++», где наиболее популярные языки, поэтому новые языки должны следовать тем же правилам, что помогает избежать ошибок для тех, кто использует C / C ++. Но этот вопрос кажется оффтопическим, и я думаю, он будет закрыт модератором.

PS В строках Delphi / Pascal 1-based, но для массивов вам необходимо предоставить диапазон, и поэтому вы можете использовать то, что вам нравится.

Поскольку существует 10 целых чисел 0..9

  • Что такое разложение массива?
  • Создание массива объектов в Java
  • Количество экземпляров Java в каждом массиве в массиве
  • Java, перемещение элементов в массиве
  • Сравнение двух целых массивов в java
  • Поиск трех элементов в массиве, сумма которого ближе всего к заданному числу
  • Как вы находите сумму всех чисел в массиве в Java?
  • Как отсортировать массив в Bash
  • Как скопировать 2-мерный массив в Java?
  • Возвращаемые массивы из функции в c ++
  • Java - порядок операций - использование двух операторов присваивания в одной строке
  • Давайте будем гением компьютера.