Почему массивы начинаются с 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, вы работаете близко к аппаратному обеспечению.

Другие вопросы по тегам