Я пытался найти ответы, но получил только ответы о том, как реализовать массивы, начиная с ненулевых индексов.Некоторые языки, такие как паскаль, предоставляют это по умолчанию, например, вы можете создать массив, например
var foobar: array[1..10] of string;
Мне всегда было интересно: почему вы хотите, чтобы индекс массива не начинался с0?
Полагаю, для начинающих может быть более привычным иметь массивы, начинающиеся с 1, а последний индекс равен размеру массива, но в долгосрочной перспективе программистам следует привыкнуть к значениям, начинающимся с 0.
Еще одна цель, о которой я мог подумать: в некоторых случаях индекс мог фактически представлять нечто, содержащееся в соответствующей записи массива.Например, вы хотите получить все заглавные буквы в массиве, может быть удобно иметь индекс, являющийся ASCII-кодом соответствующей буквы.Но довольно просто вычесть постоянное значение.В этом примере вы могли бы (в C) просто сделать что-то вроде этого, получить все заглавные буквы и получить доступ к письму с помощью ascii-кода 67:
#define ASCII_SHIFT 65
main()
{
int capital_letters[26];
int i;
for (i=0; i<26; i++){
capital_letters[i] = i+ASCII_SHIFT;
}
printf("%c\n", capital_letters[67-ASCII_SHIFT]);
}
Кроме того, я думаю, что вам следует использовать хеш-таблицы, если выхотите получить доступ к записям по какому-то ключу.
Кто-то может возразить: почему индекс всегда должен начинаться с 0?Ну, это чертовски просто так.Вы будете быстрее, когда вам просто нужно будет ввести один индекс при объявлении массива.Кроме того, вы всегда можете быть уверены, что первая запись - это массив [0], а последняя - массив [length_of_array-1].Также часто другие структуры данных начинаются с 0. Например, если вы читаете двоичный файл, вы начинаете с 0-го байта, а не с первого.
Теперь, почему некоторые языки программирования имеют эту «особенность» и почему некоторые люди спрашивают, как добиться этого в таких языках, как C / C ++ ?, есть ли ситуация, когда массив, начинающийся с ненулевого индекса, имеет видболее полезным, или даже, что-то просто не может быть сделано с массивом, начинающимся с 0?