Описатель - идентификатор простой переменной либо более сложная конструкция с квадратными скобками, круглыми скобками или звездочкой (набором звездочек).
Спецификатор типа - одно или несколько ключевых слов, определяющие тип объявляемой переменной. В языке СИ имеется стандартный набор типов данных, используя который можно сконструировать новые (уникальные) типы данных.
Инициатор - задает начальное значение или список начальных значений, которые (которое) присваивается переменной при объявлении.
Простое определение состоит из спецификации типа, за которой следует точка с запятой. Вот примеры.
int index;
int height;
char ch;
char next;
long double precision;
Когда определяется несколько идентификаторов переменных данного типа, то за спецификацией типа располагается список имен, разделенных запятыми. Предыдущее определение можно переписать так :
int index, height;
char ch,next;
long double precision;
Такое определение не задает начального значения и о таких переменных говорят, что они неинициализированы. При этом значение переменной не определено, а на практике обычно является случайным. Многие из вас уже сталкивались со случаями, когда одна и та же программа дает разные результаты при одинаковых исходных данных. Обычно это происходит из-за неинициализированных переменных.
Начальное значение может быть задано при определении переменной. Переменная с заданным начальным значением называется, как вы уже можете догадаться, инициализированной переменной. Язык С поддерживает явную форму инициализации переменной - через операцию присваивания.
Например
int index = 1000;
Переменные могут инициализироваться сколь угодно сложными выражениями, включающими вызовы функций и т.п.
В С++ определения могут располагаться в программе где угодно - в любом месте, где допустим оператор (определение переменной вообще считается оператором). В С было не так - определения переменных должны были следовать за открывающей фигурной скобкой блока и предшествовать первому исполняемому оператору функции.
Спецификатор const
Часто в программах встречаются константы, которым имеет смысл дать имя. Например, мы можем знать, что в нашей программе максимальная длина считываемой строки равна 512 байт. Если мы везде в программе будем на месте этой длины писать 512, т.е., например,
if (i < 512)
то встают две проблемы :
1) что обозначает это 512 - знает только программист (и то может через полгода забыть) - это так называемое "магическое число" и
2) если мы напишем программу, где такой цикл встречается часто, а потом вдруг выяснится, что наша длина строки не 512, а, скажем, 1024 байта, то все вхождения этих 512 в тексте программы нужно будет изменить на 1024.
Решение этих проблем состоит в использовании идентификатора, инициализированного значением 512. При этом он должен продолжать оставаться константой, т.е. его нельзя изменить в программе. Такие константы определяются с помощью модификатора const.
Например в нашем случае
const int maxlen = 512;
и, соответственно,
if (i < maxlen)
Теперь ясно, что такое maxlen, и в случае изменения величины maxlen нужно изменить только одну строку в программе. Поскольку такая константа (ее называют именованной или символической константой) не может быть изменена после своего определения, то она обязательно должна быть инициализирована.