Typedef long double NewType;
Типы данных
Тип данных определяет характеристики объекта: внутреннюю структуру, размер выделяемой памяти, множество значений и доступные операции над ним. Условно типы можно разделить на две категории:
- простые или базовые типы;
- производные типы.
Следующие типы относятся к базовым:
void - пустой тип, используется для создания указателей и указания того, что функция не возвращает значений;
int - целочисленный тип. Этот тип является типом по умолчанию. Размер типа int не определяется стандартом, он аппаратно зависимый, т.е. зависит от компьютера и компилятора. Для 16-разрядного процессора под величины этого типа отводится 2 байта, для 32-разрядного — 4 байта, 64-разрядного 8 байт;
bool - логический тип. Значение 0 означает ложь, ненулевое значение истину;
char - символьный тип. Также этот тип может использоваться как целочисленный тип, к нему применимы спецификаторы знака;
wchar_t - аналогично предыдущему, но для юникод символов;
long long - тип для 64-битных целых чисел. В стандарте С99 (версия была принята 15.11.2007) появились новые для С типы данных long long int и unsigned long long int. Диапазон значений типа данных long long int не уже, чем интервал от -(263-1) до (263-1). А диапазон значений типа данных unsigned long long int обязан содержать интервал от 0 до (264-1). Типы long long позволяют поддерживать 64-разрядные целые значения с помощью встроенного типа.
float - тип для вещественных чисел;
double - тип для вещественных чисел двойной точности;
Типы int, bool, char, wchar_t, long long называют целочисленными (целыми), типы float и double –типами с плавающей точкой (вещественными).
Существует четыре спецификатора (модификатора) типа, уточняющих внутреннее представление и диапазон значений стандартных типов.
Имена целочисленных типов могут использоваться в сочетании с парой модификаторов типа:
- signed (знаковый);
- unsigned (беззнаковый).
Модификатор типа signed указывает, что переменная может принимать как положительные, так и отрицательные значения.
Модификатор типа unsigned указывает, что переменная принимает неотрицательные значения.
По умолчанию все переменные целого типа считаются signed.
Спецификторы размера short (короткий) и long (длинный) уточняют размер: два байта и четыре соответственно вне зависимости от разрядности процессора.
Для хранения значения типа char используется один байт. Соответственно переменная данного типа может хранить 256 значений. Данный тип используется для хранения символов. Чтобы числа преобразовывать в символы используется таблица ASCII. Первоначально она содержала 128 значений - от нуля до 127, то есть в байте не использовался один бит. В таком виде таблица символов хранила буквы латинского алфавита и ряд дополнительных символов. Для национальных алфавитов (греческий, русский) используется расширенная таблица ASCII, где символы нумеруются от 0 до 255.
Тип | Диапазон значений | Размер (байт) |
bool | true и false | |
signed char | -128 ...127 | |
unsigned char | 0...255 | |
signed short int | -32 768 ... 32 767 | |
unsigned short int | 0 ... 65 535 | |
signed long int | -2 147 483 648 ... 2 147 483 647 | |
unsigned long int | 0 ... 4 294 967 295 | |
long long | -(263-1) до (263-1) | |
unsigned long long | 0…(264-1) | |
float | 3.4е-38... 3.4е+38 | |
double | 1.7е-308... 1.7е+308 | |
long double | 3.4е-4932 ... З.4е+4932 |
Производные типы можно условно подразделить на две группы:
1) скалярные производные типы. Эти типы являются производными от некоторых существующих типов, реализуя типы указателей, ссылки, перечисления. В группу скалярных производных типов входят:
- указатели;
- ссылки;
- перечисления;
2)составные производные типы. В группу составных производных типов входят:
- массивы;
- классы;
- структуры;
- объединения.
Объявление переменных
Каждая переменная перед ее использованием в программе должна быть объявлена, на основании этого определения транслятор выделит под переменную участок памяти.
Объявление переменной имеет следующий синтаксис:
[<спецификация класса памяти>] <тип> <имя> [= <инициализатор>]
[,<имя> [= <инициализатор>] ...];
Спецификатор класса памяти в объявлении переменной может быть auto, register, static или extern. Если класс памяти не указан, то он определяется по умолчанию из контекста объявления.
Тип - один из рассмотренных нами типов данных.
Имя - выбранный программистом идентификатор переменной.
Простейшая форма определения переменных:
<тип> <список имен переменных>;
Следует отметить, что за последние годы достаточно широко распространился стиль именования переменных, при котором информация о типе включается непосредственно в идентификатор переменной. Это вообще говоря существенно облегчает чтение программы.
Примеры:
Int i, j, k;
Unsigned int iCount;
Double Pi, d_Square;
Char cSpace;
Обратите внимание на необходимость символа "точка с запятой" в конце каждого определения переменных.
В соответствии с синтаксисом языка С, после определения в программе переменные по умолчанию имеют неопределенные значения. Надеяться на то, что они равны, например, 0, нельзя. Однако переменным можно присваивать начальные значения, явно указывая их в определениях:
<тип> <имя переменной>=<начальное значение>;
Этот прием программирования называется инициализацией. В отличии от присваивания значений, выполняющегося при выполнении программы, инициализация выполняется при выделении для переменной участка памяти.
Примеры:
float pi=3.1415, coef=2.45;
unsigned int year=2006;
char plus='+';
Объявление typedef.
Объявление, начинающееся с ключевого слова typedef, вводит новое имя для типа, не для переменной данного типа. Целью такого объявления часто является назначение короткого синонима для часто используемого типа.
Синтаксис:
typedef <тип> <новое имя типа> [, <новое имя типа>…];
Например, при частом применении long double можно ввести синоним NewType.
typedef long double NewType;
NewType MyVal;
Имена, вводимые с помощью typedef, являются синонимами, а не новыми типами. Следовательно, старые типы можно использовать совместно с их синонимами.