Другие языки программирования и технологии
(С++) чем отличается такая запись 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;
Указатель – это переменная, которая хранит адрес первого байта объекта в памяти. Исходя из этого средствами языка имеется возможность через указатель изменять объект в памяти.
auto px = &x;
Если такое поведение не желательно, то объект можно сделать константным. Это принято называть указателем на константу.
auto const* pcx = &x;
Кроме того сам указатель можно переопределять с одного объекта на другой путём присваивания. В этом случае указатель будет указывать на другой объект аналогичного типа данных. Если такое поведение не желательно, то указатель также можно сделать константным.
const auto cpx = &x;
Третий случай – это константный указатель на константу, то есть когда нельзя переопределить указатель на другой адрес в памяти и изменить по нему объект.
const int* const p = &x;
Надо же, первый раз такое встречаю. Где откопал?
Серега Фомантьев
с уроков по си++, там надо было в таком виде передать параметры в функцию, а приписки 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 неизменяемый указатель на неизменяемые данные
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 неизменяемый указатель на неизменяемые данные
Похожие вопросы
- (С++) чем отличается такая запись int* const arr от такой int *arr
- Написать реализацию перегруженных функций: int func (int * arr, int length); int func (double * arr, int length);
- Чем отличается в языке С++ объявление указателя на переменную int *a от int* a?
- Чем отличается в c++ int main() от void main()???
- Что значит возвращение и невозвращение значения функции? И чем отличается void от int?
- [c++] не работает long int переменная объявленная как long int a; занимает всего 4 байта ((( Что может быть не так?
- C# Почему const uint SIZE не воспринимается массивом, как константа, а int работает? Погрешности с double
- для чего в языке С ++ используется функция const?
- Как осуществить операцию сложения в с++ без операции присваивания ? int a=5; int b=6; int c=a+b; ( без "= ")
- C++ как переменную (signed int) разделить на старший и младший байт, а после записать в 2е другие переменные типа char?