Литералы для целых чисел различаются по системе счисления и могут иметь десятеричную, восьмеричную и шестнадцатеричную форму записи. Десятеричная форма записи выглядит наиболее привычно. И в качестве литералов используются обычные числа. Восьмеричный литерал обязательно начинается с нуля – 00, 02, 077. Шестнадцатеричный литерал начинается с префикса Ох – 0x0, 0x2, 0x3f.
Для явной записи беззнаковых литералов можно использовать суффикс U – 23U, а суффикс L можно использовать для явной записи литерала типа long – 23L. Рекомендуется для записи числовых значений использовать десятеричные литералы, а восьмеричные и шестнадцатеричные литералы применять для записи цепочек битов.
Для записи значений с плавающей точкой используются следующие формы:
? 1.23
? 23
? 0.23
? 1.
? 1.0
? 1.2e10
? 1.23e-10
В записи литералов с плавающей точкой не должно быть пробелов. По умолчанию, литералы с плавающей точкой имеют значение типа double. Если необходимо определить литерал типа float, это можно сделать при помощи суффикса f – 2.9999f.
Void Это фундаментальный тип, который никогда не используется самостоятельно. Не бывает объектов типа void. Этот тип указывает на то, что другой тип, в сочетании с которым он используется, не имеет значения, имеет неопределенное значение или неизвестное значение. В следующем фрагменте кода приводятся примеры применения этого фундаментального типа.
void f(); //эта функция не возвращает значение
void* pnt; //это указатель на объект неизвестного типа
void х; //эта запись неверна, объектов типа void не существует
Перечисления При помощи перечислений устанавливается некоторый набор значений, определяемых пользователем. Перечисление объявляется при помощи ключевого слова enum. В качестве элементов перечисления можно определить именованные целые константы:
enum {DEC, JAN, FEB};
В этом случае определены три целые константы. Если константы не инициализируются явно, то по умолчанию им присваиваются значения, начинающиеся с нуля и увеличивающиеся на единицу для каждой следующей константы. Таким образом значение DEC будет равно 0, JAN – 1, а FEB – 2. Перечислению можно присвоить имя, как это показано в следующем фрагменте:
enum year{JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC};
Константы в перечислении можно инициализировать значениями, отличными от индексных, которые присваиваются по умолчанию:
enum times{SAVE=10,SLEEP=20,STOP=30};
Если инициализируется только часть элементов перечисления, то те элементы перечисления, которые указаны после инициализированных, будут получать возрастающие значения, отсчитываемые от того значения, которое они получили при инициализации. В следующем фрагменте элемент STOP будет инициализирован значением 21.
enum times{SAVE=10,SLEEP=20,STOP};
Области видимости и имена
Объявление вводит имя в область видимости. Это значит, что имя может использоваться только в определенной части текста программы, и, где именно будет использоваться объявленное имя, зависит от того, в каком месте программы оно было объявлено.
Для имени, объявленного в теле функции ( локальное имя), область видимости начинается с места объявления и заканчивается там, где заканчивается блок, внутри которого было объявлено имя. Блоком считается фрагмент кода, заключенный в фигурные скобки.
Имя называется глобальным, если оно объявлено вне любой функции или класса. Область видимости глобального имени простирается от места объявления до конца файла, содержащего объявление. Внешнее по отношению к текущему блоку имя, как глобальное, так и локальное, может быть перекрыто (то есть подменено) объявлением этого же имени внутри текущего блока. В этом случае в памяти образуется два или более разных объектов с одним и тем же именем. То есть имя внутри блока может быть замещено и будет ссылаться на другую область памяти. При выходе из блока имя восстанавливает свое значение. К замещенному глобальному имени можно обратиться при помощи оператора::. К скрытому локальному имени обратиться невозможно. Этот механизм иллюстрируется в упражнении.
Упражнение 4.1 (продолжение)
19. Добавить в программу код, приведенный в листинге 4.9. Нужно при этом объявить соответствующую функцию и добавить еще одну ветвь case.
Листинг 4.9
// Блок 16
void f4(){
//В начале файла объявлена глобальная переменная mm, указывающая на массив
//типа char, то есть на массив символов, то есть на строку. Устанавливая
//первым элементом массива 0, мы показываем, что это строка пустая. Затем,
Читать дальше
Конец ознакомительного отрывка
Купить книгу