Язык С++ на примерах

Константы в C++

Объявление и определение константы (const cpp):

const int nConst = 1;

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

Константным может быть массив:

const int nMassiv[] = {11, 12, 13};

Указатель на объект-константу:

const int* pConst = &nConst;

здесь константой является nConst, а не указатель.

Константный указатель:

int *const pVar = &nVar;

здесь константой является указатель.

Пример:

Получаем: Константы в C++

К одному объекту можно обращаться через указатель на константу и указатель на переменную:

Получаем: Cpp указатель на константу

Строка

const int* pConst = &nVar;

превращает nVar в константу, поэтому присвоение через указатель на константу

*pConst = *pConst + 1;

является ошибкой.

Строка

int* pVar = &nVar;

является указателем на переменную, поэтому присвоение через указатель корректно:

*pVar = *pVar + 1;

т.о. nVar в первом случае ведет себя как константа, а во втором — как переменная.

Указатели в C++ на примерах

Указатель — это переменная, значением которой является адрес другой переменной.

Простой пример указателя (cpp указатель):

Получаем: Cpp pointer

В этом примере суть основное, что надо знать про указатели в языке cpp. Сначала объявлена переменная val;

int val = 0;

Далее объявляем указатель на тип int с помощью оператора *:

int* pVal;

Принято название указателя начинать с «p», ведь указатель по-английски pointer.

С помощью оператора & получаем адрес переменной val и присваиваем этот адрес указателю. Указатель — это переменная для хранения адреса другой переменной:

pVal = &val;

Далее выполняем разыменование с помощью оператора *:

*pVal = 123;

Выражение *pVal — это переменная, на которую указывает наш указатель pVal, а он указывает на val. *pVal — это новое обозначение исходной переменной val. Выражение

*pVal = 123;

равно выражению

val = 123;

Итак, указатель хранит адрес переменной, а разыменованный указатель есть просто новое обозначение переменной, на которую указывает указатель.

Ещё раз:

int val = 0; // Объявляем переменную val типа int;

int* pVal; // Объявляем указатель на тип int;

pVal = &val; // Сохраняем адрес переменной val в указателе pVal;

// Теперь разыменование *pVal; это *pVal — просто новое обозначение переменной val.

*pVal = 123; // Присваиваем переменной val значение 123;

//Теперь val содержит 123. Вместо *pVal = 123; можно было написать val = 123; с тем же успехом.

Обратите внимание, что оператор * используется для объявления указателей и для разыменования. Оператор & используется для получения адреса переменной. Операторы * и & являются обратными. Пример:

*(&val) = 123;

даёт

val = 123;

Ссылки в C++

Ссылка — это новое обозначение переменной. Пример:

Получаем: Cpp Ссылки

Строка

int& rnVar = nVar;

создаёт ссылку и инициализирует её. Ссылку можно понимать как разыменованный константный указатель. Менять значение ссылки нельзя (т.е. адрес, который в неё хранится), но можно менять значение переменной, на которую она ссылается. Инициализация ссылки обязательна.

Чтоб перейти от ссылки к указателю, присваиваем значение ссылки указателю:

int *pVar = &rnVar;

Пример:

Результат будет таким же, как в предыдущем примере.

Итак, определив ссылку, мы используем её имя как новое обозначение переменной.

Ссылка может быть аргументом функции. Пример:

Получаем: Cpp Ссылки

Вот так работаем со ссылками.