Первый индекс всегда начинается с нуля, так как компиляторы используют значение индекса для вычисления фактического адреса элемента в массиве.
Рассмотрим следующий пример.
void someFunction()
{
int exampleArray[5] = {0, 1, 2, 3, 4};
}
"exampleArray", требуется место для хранения 5 элементов, и каждому элементу потребуется количество места, необходимое для хранения типа данных "int".В зависимости от платформы (16-битная / 32-битная или 64-битная) и операционной системы, размер типа данных «int» может быть разным.Для нашего обсуждения, допустим, что размер «int» составляет 4 байта.
Таким образом, чтобы сохранить вышеупомянутый массив в памяти, нам нужна память для 5 целых чисел = 5 * 4 = 20 байтов.Теперь у каждого элемента в этом массиве есть «адрес».
Допустим, «exampleArray» хранится по адресу 100. Тогда адрес элемента с индексом «i» будет равен 100 + (i * sizeof (int)).Таким образом, для приведенного выше массива
Index 0, address = 100 + (0 * 4) = 100
Index 1, address = 100 + (1 * 4) = 104
Index 2, address = 100 + (2 * 4) = 108
Index 3, address = 100 + (3 * 4) = 112
and so on..
Так компилятор генерирует код для доступа к индексам массива.Поэтому, когда мы пишем exampleArray [2], компьютер должен иметь возможность вычислить адрес элемента по индексу 2, чтобы иметь возможность доступа к его ячейке памяти и, таким образом, к его значению.Таким образом, согласно приведенной выше формуле, элемент с индексом «2» будет равен 100 + (2 * 4) = 108.
Поскольку 1-й элемент в массиве должен находиться по адресу 100, его индекс становится равным 0чтобы вычислить его адрес простым способом.