Сначала нужно определиться с понятием объявления как одним из основополагающих в языке C++. Объявление вводит одно или более имен в программу. Частным случаем объявления является определение. Разница между ними будет рассмотрена позже.
Переменной называется именованная область памяти, которая может хранить различные значения. Любая переменная имеет конкретный тип, определяющий размер памяти в байтах, который будет выделен под объявленную переменную. Синтаксис объявления переменной выглядит следующим образом:
[<спецификатор класса памяти>] [const] <спецификатор типа>
<идентификатор> [= <начальное значение>]
[, <идентификатор> [= <начальное значение>]] ...;
Здесь угловые скобки <> означают, что вместо них должно быть подставлено реальное значение, квадратные скобки [] – что заключённое в них выражение необязательно и может быть опущено.
В приведённом объявлении необязательный спецификатор класса памяти может принимать значения auto, register, static, extern и указывает как будет храниться переменная в памяти.
const означает объявление константы, т.е. разновидности переменной, значение которой не может быть изменено в ходе работы программы.
Спецификатор типа описывает тип, который будет иметь объявляемая переменная.
Идентификатор означает имя переменной. Необязательное начальное значение может быть указано, если в переменную необходимо занести значение сразу при объявлении. Запись в переменную начального значения называется инициализацией.
Символ «;» является в C++ разделителем операторов и показывает что текущий оператор – объявление переменной – заканчивается.
Например:
int var; // Переменная var типа int
float floatVar = 2.4; // Переменная floatVar типа float с начальным
// значением 2.4
char c1 = 20, c2, c3 = 'c'; // Три переменных типа char. c1 имеет начальное
// значение 20, с3 – символ 'c' (99 в десятичном
// представлении)
const unsigned short C = 60123; // Константа C типа short без знака
В последнем случае, т.е. при объявлении константы, присвоение начального значения обязательно и в дальнейшем в программе значение константы изменяться не может.
В приведённом примере переменные var и c2 не были проинициализированы, поэтому перед их использованием нужно присвоить им какое-либо значение.
Нельзя использовать значения неинициализированных переменных!
Дело в том, что это не является ошибкой с точки зрения компилятора, в лучшем случае он выдаст предупреждение (warning), но позволит скомпилировать и запустить программу.
При этом в переменной, которая не была проинициализирована, может оказаться абсолютно любое значение, что вряд ли требуется по логике работы программы.
Происходит это потому, что память, используемая для хранения данных, по умолчанию не очищается. Когда необходимость в используемом участке памяти отпадает, он освобождается, то есть помечается как свободный, и может быть выделен любой программе, в том числе – и вашей. Как известно, переменная – именованная область памяти, и при объявлении переменной выделяемая под нее память тоже не очищается, таким образом, начальным значением неинициализированной переменной окажется кусок данных, оставшийся после каких-то вычислений. Обычно это – очень большое положительное или отрицательное значение.
Например, следующий фрагмент кода демонстрирует использование неинициализированных переменных и полученный при этом результат: