Неизменяемые переменные (константы)
В Си++ введен дополнительный контроль за изменением значений переменных. Ключевое слово const, используемое при определении и инициализации переменной, запрещает ее изменение, что контролируется транслятором при ее дальнейшем использовании. Такая же возможность существует и для формальных параметров функции, например:
const int n=5;
n++; // Запрещено
int xxx(const int m)
{
m++; // Запрещено
}
Применительно к указателю const может использоваться в двух вариантах, как к значению указателя (адресу), так и к указуемой переменной:
-при использовании cons t применительно к указуемой переменной разрешается модифицировать сам указатель при помощи присваивания и операций адресной арифметики, а операции косвенного обращения по указателю запрещены. Такой указатель называется указателем на постоянный объект:
const char * p;
p = "1234567890"; // Разрешено
p + =3; // Разрешено
*(p+3) = '3'; // Запрещено
(*p)++; // Запрещено
-при использовании const применительно к указателю запрещается менять значение указателя после инициализации, в том числе средствами адресной арифметики. Такой указатель называется постоянным указателем:
char const* p = "1234567890";
char c;
(*p) = '3'; // Разрешено
p++; // Запрещено
c = *(p+3); // Запрещено
Полная фиксация указателя и адресуемой им переменной возможна в таком виде :
const char const* p = "1234567890";