
Простые объекты
К простым объектам языка Си относятся константы и переменные.
Константа — это ограниченная последовательность символов алфавита языка (лексема), представляющая собой изображение фиксированного (неизменяемого) объекта.
Целые числова
Десятичные |
Последовательность цифр (0 – 9), которая начинаются с цифры отличной от нуля. Пример: 1, -29, 385. Исключение – число ноль 0
|
Восьмеричные |
Последовательность цифр (0 – 7), которая всегда начинается с нуля. Пример: 00, 071, –052, –03 |
Шестнадцатеричные |
Последовательность из цифр (0 – 9) и букв (А – F), которой предшествует Ох. Пример: Оx0, Оx1, –ОX2AF, ОX17 |
Вещественные числа
Число с плавающей точкой состоит из следующих частей:
целой части — последовательности цифр;
десятичной точки;
дробной части — последовательности цифр;
символа экспоненты е или Е;
экспоненты в виде целой константы (может быть со знаком).
Любая часть (но не обе сразу) из нижеследующих пар может быть опущена:
целая или дробная часть;
десятичная точка или символ е (Е) и экспонента в виде целой константы.
Примеры
345. |
3.14159 |
2.1Е5 |
.123ЕЗ |
4037е-5 |
По умолчанию компилятор присваивает вещественному числу тип double. Если программиста не устраивает тип, который компилятор приписывает константе, то тип можно явно указать в записи константы с помощью следующих суффиксов: F (или f) – float для вещественных, U (или и) – unsigned для целых, L (или l) – long для целых и вещественных.
Примеры:
3.14159F — константа типа float, занимающая 4 байта;
3.14L — константа типа long double, занимающая 10 байт.
Символьный объект — это один символ, цифра или буква, заключенные в одинарные кавычки, например: ‘z’, ‘V’. Обратная косая черта (слэш) и символ служат для обозначения управляющих символов, не имеющих графического представления, например, ‘\n’ – переход на новую строку. Все символьные константы имеют тип char..
Строковые (стринговые) объекты
Строковый объект — это последовательность символов, заключенная в кавычки, например: "Это строковая константа". Кавычки не входят в строку, а лишь ограничивают её. Технически строка представляет собой массив символов и по этому признаку может быть отнесена к разряду сложных объектов языка Си. Однако строковый объект удобнее рассмотреть вместе с другими объектами.
В конце каждой строки компилятор помещает символ '\0', чтобы программа могла определить конец строки.
Поскольку строковая константа состоит из символов, то она имеет тип char. Количество ячеек памяти, необходимое для хранения строковой константы на единицу больше количества символов в ней. Следует отчетливо понимать, что символьная константа и строка из одного символа не одно и то же: ‘x’ не есть "х". Первое — это символ, использованный для числового представления буквы х, а второе — строковая константа, содержащая символ х и '\0'.
Добавив к описанию объекта служебное слово const, можно превратить этот объект из переменной в константу, например:
const int model = 90;
const int v[] = { 1, 2, 3, 4 };
Поскольку константе нельзя ничего присвоить, она должна быть инициализирована. Описывая какой-либо объект как const, мы гарантируем, что его значение не изменяется в области видимости:
model++; // ошибка
Есть способ связывания имен с целыми константами, который часто более удобен, чем описание с const. Например:
enum { ASM, AUTO, BREAK };
Здесь определены три целых константы, которые называются элементами перечисления, и им присвоены значения. Поскольку по умолчанию значения элементов перечисления начинаются с 0 и идут в возрастающем порядке, то приведенное перечисление эквивалентно определениям:
const ASM = 0;
const AUTO = 1;
const BREAK = 2;
Перечисление может иметь имя, например:
enum keyword { ASM, AUTO, BREAK };
Имя перечисления становится новым типом.
Перечисление – это набор именованных целых констант. Началом объявления перечислимого типа служит слово enum. При определении такого типа можно явно сопоставить имени значения некоторое целое (не обязательно положительное) число; при отсутствии явного задания целого первому элементу перечисляемого типа неявно соответствует 0, а каждому следующему - целое значение, на единицу большее целого значения предыдущего элемента.
enum keyword { ASM=10, AUTO=1, BREAK };
Тогда BREAK примет значение =2.
#include <stdio.h>
void main () {
enum {red,blue=10,white};
printf("red=%d\n blue=%d\n white=%d\n", red,blue,white);
}
При этом:
использование имени перечисляемого типа для объявления переменной эквивалентно использованию типа integer, такая переменная может содержать любое целое значение. Однако строка, содержащая имя элемента автоматически в перечисление не превратится;
имена значений перечисляемого типа на самом деле понимаются как имена целых констант, и к этим значениям применимы все операции над целыми числами, даже если они выводят за пределы множества целых значений элементов перечисляемого типа.
Так что перечисляемый тип в смысле языка Си - это не совсем тип в строгом смысле этого слова, а скорее удобное задание группы именованных констант целого типа.