Объявление обычных переменных
/*тип данных*/ /*идентификатор*/;
Тип данных может быть абсолютно любой, например: char
, int
, double
, и т.д. Идентификатор должен удовлетворять правилам именования переменных в C/C++, и не могут быть использованы в одной области переменные с одинаковыми именами. Переменные автоматически не инициализируются значениями, они имеют значение (мусор), которое хранится в памяти по адресу переменной.
Правила именования переменных гласят:
- имя переменной не должно начинаться с цифры;
- имя переменной не должно включать следующие символы:
,
/
,:
,*
,?
,"
,<
,>
,|
.
Объявление указателя
/*тип данных*/ */*идентификатор*/;
Типы указателей
Указатели имеют два режима: указатели, которые не допускают изменений в данных и указатели, которые всегда должны указывать на один и тот же адрес. Эти два типа указателей могут быть объединены в один, который будет иметь константный адрес и константное значение. Подробно об указателях читать в статье: Указатели в С++.
Указатель на константные данные
Указатель на константные данные не позволяют модифицировать данные, на которые они ссылаются. Есть два способа объявления таких указателей, главное, чтобы спецификатор const
предшествовал символу *
, так что любое из следующих двух объявлений будет корректно.
const type * variable;
или
type const * variable;
где,
type
— тип данных;variable
— имя указателя.
Адрес памяти хранится в указателе, который ссылается на константные данные, это специфицирует ключевое слово const
. Таким образом, значение указателя нельзя изменить, если вы попытаетесь это сделать, компилятор выдаст ошибку.
Константный указатель на неконстантные данные
Такие указатели имеют постоянный адрес памяти, это специфицирует ключевое слово const
, объявленное после символа *
. Такие указатели должны быть сразу же инициализированы адресом.
type * const identifier = /*некоторый адрес в памяти*/;
где,
type
— тип данных;identifier
— имя указателя.
Константный указатель на константные данные
Для объединения двух режимов указателей, вы можете просто включить const
для данных, на которые указывает указатель и для адреса, поставив const
как до, так и после символа *
:
const type * const identifier = /*адрес в памяти*/;
или так
type const * const identifier = /*адрес в памяти*/;
Такие указатели не позволяют изменять данные на которые они указывают и не позволяют менять адрес в памяти.
Объявление ссылки
Ссылочная переменная является псевдонимом для другой переменной. Ссылки объявляются с помощью символа, который называется амперсанд — &
:
type & identifier = varname;
где,
type
— тип данных;identifier
— имя ссылки;varname
— имя переменной, на которую ссылается ссылка.
Давайте посмотрим пример использования ссылочной переменной.
int var; int & varRef = var; // сейчас ссылка varRef эквивалентна переменной var
Ссылочная переменная, при объявлении, всегда должна инициализироваться. Ссылки не могут иметь значение NULL
. Ссылки также могут быть использованы в качестве параметра функции:
void function(double & dobRef); // ссылка, в качестве параметра функции
Когда переменная передается в функцию по ссылке, то значение этой переменной не копируется, просто, ссылочная переменная ссылается на значение в памяти. Это означает, что любые модификации с ссылочной переменной могут реально изменить исходное значение. В целях предотвращения изменения в оригинальной переменной, сохраняя при этом повышенную производительность (ведь значение не копируется), можно ссылаться со спецификатором const
. Смотрим пример:
void function(const double & dobRef); // константная ссылка, в качестве параметра функции
Объявление ссылки в классе
class Name { char & memRef; // ссылка на участок памяти };
В этом случае, ссылка должна быть инициализирована в конструкторе класса. Обратите внимание, что ссылка в классе является потенциально опасной, потому как срок службы объекта не регулируется классом. Часто, такая ссылка, в классе используется, для хранения адреса памяти чтобы сделать копию значения или явно инициализировать указатель. Подробно по ссылкам вы можете прочитать статью: Использование ссылок в С++.
Комментарии
sercher
мне в статье не хватает места объявления переменных, а также областей видимости этих объявлений