Массив имеет фиксированный размер после его создания; ваш массив имеет длину 7, и все - он не изменится.
Ваш код сдвигает массив на один элемент, что включает запись в arr[7]
, что означает «сохранить это значение в восьмом элементе массива arr
», и компилятор, к счастью, делает это - нет проверки границ для массивы в C ++. Тем не менее, он не увеличивает длину массива, он просто записывает в память, где восьмой элемент был бы, если бы массив был длиной восемь элементов.
В вашем коде так получилось, что память, в которой находился бы восьмой элемент, на самом деле хранит переменную k
, поэтому значение k
меняется на 7 (я подозреваю, что переменная n
был оптимизирован, иначе это было бы n
, которое было изменено).
Короче говоря, обработка массивов в C ++ (и C) чревата опасностью, и вы должны быть очень осторожны. В любом текущем и / или производственном коде вы должны использовать std::vector
.