Константы в C++
Объявление и определение константы (const cpp):
при объявлении константы ей сразу присваивают значение, ведь константу нельзя менять.
Константным может быть массив:
Указатель на объект-константу:
здесь константой является nConst, а не указатель.
Константный указатель:
здесь константой является указатель.
Пример:
Получаем:
К одному объекту можно обращаться через указатель на константу и указатель на переменную:
Получаем:
Строка
превращает nVar в константу, поэтому присвоение через указатель на константу
является ошибкой.
Строка
является указателем на переменную, поэтому присвоение через указатель корректно:
т.о. nVar в первом случае ведет себя как константа, а во втором — как переменная.
Указатели в C++ на примерах
Указатель — это переменная, значением которой является адрес другой переменной.
Простой пример указателя (cpp указатель):
Получаем:
В этом примере суть основное, что надо знать про указатели в языке cpp. Сначала объявлена переменная val;
Далее объявляем указатель на тип int с помощью оператора *:
Принято название указателя начинать с «p», ведь указатель по-английски pointer.
С помощью оператора & получаем адрес переменной val и присваиваем этот адрес указателю. Указатель — это переменная для хранения адреса другой переменной:
Далее выполняем разыменование с помощью оператора *:
Выражение *pVal — это переменная, на которую указывает наш указатель pVal, а он указывает на val. *pVal — это новое обозначение исходной переменной val. Выражение
равно выражению
Итак, указатель хранит адрес переменной, а разыменованный указатель есть просто новое обозначение переменной, на которую указывает указатель.
Ещё раз:
int* pVal; // Объявляем указатель на тип int;
pVal = &val; // Сохраняем адрес переменной val в указателе pVal;
// Теперь разыменование *pVal; это *pVal — просто новое обозначение переменной val.
*pVal = 123; // Присваиваем переменной val значение 123;
//Теперь val содержит 123. Вместо *pVal = 123; можно было написать val = 123; с тем же успехом.
Обратите внимание, что оператор * используется для объявления указателей и для разыменования. Оператор & используется для получения адреса переменной. Операторы * и & являются обратными. Пример:
даёт
Ссылки в C++
Ссылка — это новое обозначение переменной. Пример:
Получаем:
Строка
создаёт ссылку и инициализирует её. Ссылку можно понимать как разыменованный константный указатель. Менять значение ссылки нельзя (т.е. адрес, который в неё хранится), но можно менять значение переменной, на которую она ссылается. Инициализация ссылки обязательна.
Чтоб перейти от ссылки к указателю, присваиваем значение ссылки указателю:
Пример:
Результат будет таким же, как в предыдущем примере.
Итак, определив ссылку, мы используем её имя как новое обозначение переменной.
Ссылка может быть аргументом функции. Пример:
Получаем:
Вот так работаем со ссылками.