Математики перечисляют элементы массива, начиная с первого. То есть номер первого элемента массива равен 1. Что вполне логично, согласитесь. В “человеческих” языках программирования, таких как Паскаль, нумерация элементов массива также начинается с 1 (как правило, но не обязательно - см. ниже).
А вот создатели С/С++ и многих других языков, основанных на них, пошли своим путём. С их точки зрения первый элемент массива должен иметь номер 0. То есть нумерация (индексация) элементов массива в С/С++, JavaScript и других языках начинается с нуля. Это часто приводит к ошибкам, причём ошибаются не только новички, но и бывалые. Чаще всего ошибка заключается в попытке обратиться к последнему элементу. Например, если в массиве M4 четыре элемента, то новички обычно пишут M4[4] вместо M4[3].
Пример:
//Массив из 4-х элементов
int M4[4] = {0};
//Присваиваем 1 ПЕРВОМУ элементу
M4[0] = 1;
//Присваиваем 2 ТРЕТЬЕМУ элементу
M4[2] = 2;
Как я уже сказал, немного нелогично, но привыкнуть можно. Сложнее привыкнуть к другому:
//Присваиваем 3 СОТОМУ элементу
//но его в массиве нет!!!
M4[99] = 3;
Здесь мы записываем в сотый элемент массива число 3. Но в массиве-то у нас всего 4 элемента, и сотого там нет!
Старый добрый Паскаль бы этого никогда не пропустил. А в С++ всё в порядке. Ничего необычного. Потому что ошибки программиста в С++ - это исключительно проблемы программиста.
Правда, современный Паскаль это тоже допускает. Но хотя бы выдаёт предупреждение:
А С++ не выдаёт никаких предупреждений. Потому как с точки зрения синтаксиса С++ это допустимо.
Так что будьте внимательны - такие вещи могут привести к непредсказуемым последствиям, и отыскать подобные ошибки в программе на С++ будет очень трудно (ведь никаких сообщений компилятор не выдаёт).
Кстати, обратите внимание - в Паскале нумерацию массива тоже можно начать с нуля. И в этом смысле Паскаль более гибок, чем С++.
На этом всё. Подписывайтесь на канал или подключайтесь к Телеграм-каналу, чтобы ничего не пропустить.