Поддержка JavaScript отключена
SBP-Program | |||||||
На главную |   | ||||||
  |
С++ на примерах]]> Объявление и определение константы (const cpp): const int nConst = 1;
при объявлении константы ей сразу присваивают значение, ведь константу нельзя менять. Константным может быть массив: const int nMassiv[] = {11, 12, 13};
Указатель на объект-константу: const int* pConst = &nConst;
здесь константой является nConst, а не указатель. Константный указатель: int *const pVar = &nVar;
здесь константой является указатель. Пример: Получаем: ![]() К одному объекту можно обращаться через указатель на константу и указатель на переменную: Получаем: ![]() Строка const int* pConst = &nVar;
превращает nVar в константу, поэтому присвоение через указатель на константу *pConst = *pConst + 1;
является ошибкой. Строка int* pVar = &nVar;
является указателем на переменную, поэтому присвоение через указатель корректно: *pVar = *pVar + 1;
т.о. nVar в первом случае ведет себя как константа, а во втором — как переменная. Указатель — это переменная, значением которой является адрес другой переменной. Простой пример указателя (cpp указатель): Получаем: ![]() В этом примере суть основное, что надо знать про указатели в языке 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;
Ссылка — это новое обозначение переменной. Пример: Получаем: ![]() Строка int& rnVar = nVar;
создаёт ссылку и инициализирует её. Ссылку можно понимать как разыменованный константный указатель. Менять значение ссылки нельзя (т.е. адрес, который в неё хранится), но можно менять значение переменной, на которую она ссылается. Инициализация ссылки обязательна. Чтоб перейти от ссылки к указателю, присваиваем значение ссылки указателю: int *pVar = &rnVar;
Пример: Результат будет таким же, как в предыдущем примере. Итак, определив ссылку, мы используем её имя как новое обозначение переменной. Ссылка может быть аргументом функции. Пример: Получаем: ![]() Программирование
|
  | |||||
 
|
 
|
||||||