Другие языки программирования и технологии

(С++) чем отличается такая запись int* const arr от такой int *arr?

С константой я понял, а почему звездочка в первом случае не пишется также перед указателем arr, а пишется после int и если написать ее к arr то компилятор ругается..
auto x = 5;

Указатель – это переменная, которая хранит адрес первого байта объекта в памяти. Исходя из этого средствами языка имеется возможность через указатель изменять объект в памяти.

auto px = &x;

Если такое поведение не желательно, то объект можно сделать константным. Это принято называть указателем на константу.

auto const* pcx = &x;

Кроме того сам указатель можно переопределять с одного объекта на другой путём присваивания. В этом случае указатель будет указывать на другой объект аналогичного типа данных. Если такое поведение не желательно, то указатель также можно сделать константным.

const auto cpx = &x;

Третий случай – это константный указатель на константу, то есть когда нельзя переопределить указатель на другой адрес в памяти и изменить по нему объект.

const int* const p = &x;
Сергей Киселев
Сергей Киселев
60 493
Лучший ответ
Надо же, первый раз такое встречаю. Где откопал?
Олег Не Скажу
Олег Не Скажу
26 548
Серега Фомантьев с уроков по си++, там надо было в таком виде передать параметры в функцию, а приписки const типа делают функцию которая например заполняет массив более надежной, потому что тот кто например захочет (:D) потом использовать эту функцию будет уверен что туда можно смело передавать значения и они никак не поменяются внутри функции. Ну фишка такая
то, что стоит до const - будет неизменяемым. в данном случае указатель нельзя будет, например, инкрементировать
arr++; // ошибка

однако модифицировать данные, на которые указывает arr - можно
*arr = 1; // сработает

исключение - когда const стоит в самом начале: const int и int const - это одно и то же

итого.
int* arr изменяемый указатель на изменяемые данные
int* const arr неизменяемый указатель на изменяемые данные
int const* arr либо const int* arr изменяемый указатель на неизменяемые данные
int const* const arr либо const int* const arr неизменяемый указатель на неизменяемые данные