- •Занятие 10 Пользовательские типы данных
- •1. Структурный тип данных
- •1.1 Определение структуры
- •Int year; //год
- •Int year; //год
- •2. Оператор typedef
- •9.3 Определение структуры безымянного типа
- •9.4 Доступ к элементам структуры
- •9.5 Операции присваивания и сравнения для структур
- •9.7 Битовые поля
- •9.8 Объединения или смеси
- •9.9 Перечисления
Занятие 10 Пользовательские типы данных
Все переменные, которые мы использовали до настоящего момента, относились к одному определенному типу – числовому или символьному, даже массивы содержали переменные только какого-то одного типа. Все встречавшиеся нам переменные были простыми.
В отличие от простых типов, которые заранее определены в языке С, сложные типы определяет сам пользователь (отсюда и название – пользовательские типы). В стандарте С имеется 4 "базовых кирпичика", из которых строится вся работа по построению пользовательских типов:
- Структуры (structures);
- объединения, или союзы (unions);
- битовые поля (bit fields);
- перечисления (enumerations).
Причем последний тип, перечисление, не очень популярен, т.к. никаких дополнительных преимуществ, кроме улучшения читаемости программы, он не дает. А наиболее распространен первых пользовательский тип – структурный, с него и начнем изучение.
1. Структурный тип данных
Решая поставленную задачу, человек стремится максимально отразить реальную ситуацию, когда некую информацию нужно организовать и обработать систематически. Такая необходимость возникает постоянно при создании современных программных систем вне зависимости от области применения, будь то бухгалтерские, торговые или системы для решения инженерных задач.
В простейших программах (и в наших примерах) каждый элемент данных представлен в виде переменной, определенной простым типом float, int, char. Но при программировании более сложных задач приходится иметь дело с объектами, которые содержат не один, а несколько типов данных – в этом случае используется структурный тип данных.
Приведем простой пример использования структур. Если в программе необходимо использовать дату, то под каждое поле данных необходимо выделить отдельную переменную, например так:
int day; //день
char month[15]; //месяц
int year; //год
Однако этими тремя переменными мы собираемся пользоваться не по отдельности, а как единым понятием "дата", т.е. требуется объединить данные разных типов в единое множество, в нашем случае – это две переменные типа int и текстовая строка, и такая совокупность данных называется структурой. Дадим более точное определение структурного типа данных.
Структура – это совокупность элементов, каждый из которых может иметь любой тип, кроме функции. В отличие от массива, который состоит из элементов одинакового типа, структура может состоять из элементов разных типов.
1.1 Определение структуры
Первым шагом в создании взаимосвязанного множества переменных является определение структурного типа, тем самым пользователь создает новый, до этого момента не существовавший тип данных:
- Дает имя структуре, которое является идентификатором нового типа данных,
- перечисляет имена и типы каждого элемента, из которых состоит структура.
Определение структуры имеет следующий формат:
struct тип
{ тип_элемента_1 имя_элемента_1;
….
тип_элемента_n имя_элемента_n;
} ;
Именем элемента может быть любой идентификатор.
Пример 1. Определение нового типа date, состоящего из полей (элементов):
struct date
{ int day; //день
char month[15]; //месяц