Кстати, я по этой причине всегда пишу const, volatile... ПОСЛЕ
типа, а не наоборот (как почему-то делает большинство). Это
помогает избегать такой путаницы. // const находится СПРАВА от типа, на который он действует
int * const ptr = &array; // указатель для чтения/записи, ptr - нельзя модифицировать
int const * ptr; // указатель только для чтения, ptr - можно изменять
int const * const ptr = &array; // указатель только для чтения, ptr - нельзя модифицировать
// const находится СЛЕВА от типа, на который действует. Получается невразумительно.
const int * ptr; // указатель только для чтения, ptr - можно изменять
// const находится СЛЕВА и СПРАВА от типа, на который действует. Получается невразумительно.
const int * const ptr = &array; // указатель только для чтения, ptr - нельзя модифицировать