Преимущества запуска массивов в 0? - PullRequest
4 голосов
/ 16 декабря 2011

Какова цель индексов массива, начинающихся с 0 в большинстве языков программирования, в отличие от обычного способа, которым мы ссылаемся на большинство вещей IRL (первое, второе, третье и т. Д.)?Какая логика или польза за этим?

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

Обновление : Одно из преимуществ, которое я прочитал в Googling, заключается в том, что для циклов можно получить i < n, если вы хотите перейти на n.

Ответы [ 6 ]

9 голосов
/ 16 декабря 2011

Дейкстра излагает рассуждения в Почему нумерация должна начинаться с нуля .

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

при запуске с индексом 1, диапазон индекса 1 ≤ i

2 голосов
/ 16 декабря 2011

Когда мы обращаемся к элементу по индексу, как [i], компилятор преобразует его в [a + i].Таким образом, индекс первого элемента равен нулю, потому что [a + 0] даст нам «a», которое указывает на первый элемент в массиве.Это вполне очевидно, скажем, для C ++, но не для более новых языков, таких как C #.

2 голосов
/ 16 декабря 2011

Дейкстра написал очень интересную статью об этом в 1982 году: Почему нумерация должна начинаться с нуля .

0 голосов
/ 16 декабря 2011

В мои старые дни ассемблера было естественно, что смещение начиналось с нуля.

dcl   foo(9)
ldx0  0 'offset to index register 0

lda   foo,x0 'get first element
adx0  1,du   'get 2nd
ldq   foo,x0

Если смотреть на это с точки зрения аппаратного обеспечения, это имеет больше смысла.

0 голосов
/ 16 декабря 2011
0 голосов
/ 16 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...