Почему массивы начинаются с 0 вместо 1? (C, C++)
Не проблема кода, а сомнение, почему массивы на C и C++ начинаются с 0? Это как-то связано с каким-то внутренним процессом?
int array[4]={1,2,3,4};
cout<<array[0];
cout<<array[1];
cout<<array[2];
cout<<array[3]; ///This prints 1234
Но почему это вместо
int array[4]={1,2,3,4};
cout<<array[1]; //as the first element
cout<<array[2];
cout<<array[3];
cout<<array[4];
?
2 ответа
Потому что запись делает арифметику указателей. array[0]
на самом деле означает расположение массива плюс размер 0 элементов.
Как всегда в C, вы работаете близко к оборудованию.
Рассмотрим элементы int arr[i].
arr [i] интерпретируется как *(arr + i). Теперь arr - это адрес массива или адрес 0-го элемента индекса массива. Таким образом, адрес следующего элемента в массиве равен arr + 1 (поскольку элементы в массиве хранятся в последовательных ячейках памяти). Так что если вы сделаете *(arr+0), это даст начальную ячейку памяти массива. и *(arr+1) дает следующую ячейку памяти. так что это я т.е. 0,1,.. и т. д. можно использовать как смещение.
Как сказал @ravnsgaard в C, вы работаете близко к аппаратному обеспечению.