Автор работы: Пользователь скрыл имя, 20 Мая 2013 в 10:57, доклад
Структура – составной тип данных, который может содержать элементы разных типов. Структуры позволяют группу связанных между собой переменных трактовать не как множество отдельных элементов, а как единое целое.
Элементы структуры также называют полями или членами.
Элементами структур могут быть данные любых типов, за исключением функций и структур того же типа, что и определяемый тип.
Семинар 11. Типы данных, создаваемые пользователем: структуры, перечисления, объединения, битовые поля
Структура –
составной тип данных, который
может содержать элементы разных
типов. Структуры позволяют группу
связанных между собой
Элементы структуры также называют полями или членами.
Элементами структур могут быть данные любых типов, за исключением функций и структур того же типа, что и определяемый тип.
Структура объявляется следующим образом:
struct [ имя_типа ] {
тип_1 элемент_1;
тип_2 элемент_2;
…
тип_n элемент_n;
} [ список_объявляемых_переменных ];
Если список объявляемых переменных отсутствует, то описание структуры определяет новый тип, который можно использовать так же, как стандартные типы. Если имя типа отсутствует, то должен быть список переменных. В этом случае описание структуры служит определением элементов этого списка.
Для получения размера структуры используется оператор sizeof:
sizeof переменная или sizeof (имя_структуры)
Доступ к полям структуры выполняется с помощью операций выбора (точка) при обращении к полю через имя структуры и -> при обращении через указатель:
Одну структуру можно присвоить другой структуре с помощью оператора =. В этом случае копируются значения всех полей структуры. Например,
Элементом структуры может быть структура, тип которой уже определен.
Перечислимый тип данных используется в тех случаях, когда переменная может принимать заранее известные значения, и количество этих значений невелико.
Синтаксис объявления перечислимого типа:
enum [ИмяТипа] {СписокКонстант} [ИмяПеременной];
Константы должны быть целочисленными. При отсутствии инициализатора первая константа обнуляется, а каждой следующей присваивается значение на единицу больше, чем предыдущей. Имена констант должны быть уникальными, а значения могут совпадать.
При выполнении арифметических операций перечисления преобразуются в целые.
Пример 11.1
Структура result имеет 2 поля: фамилия студента (Fam) и результаты трех экзаменов (массив ball из 3 элементов). Для удобства создадим перечисление marks, содержащее возможные оценки. Массив структур vedom содержит результаты экзаменов. Для простоты он содержит 4 элемента и инициализируется.
Вывод структуры на экран
и обработка выполняются
Функция mid вычисляет средний балл студента. Параметром функции является структура result, которая передается в функцию по ссылке. Это самый удобный и эффективный способ передачи структур в функцию, так как данные не копируются. Слово const запрещает изменение переданной в функцию структуры.
Объединение (union) – частный случай структуры, все поля которой располагаются по одному и тому же адресу. Формат описания такой же, как у структуры, только вместо слова struct используется слово union.
Длина объединения равна наибольшей из длин его полей. В каждый момент времени в переменной типа объединение хранится только одно значение. Объединения применяют для экономии памяти в тех случаях, когда известно, что больше одного поля одновременно не требуется.
В качестве примера рассмотрим объединение u, которое позволяет получить отдельный доступ к младшему u.al[0] и к старшему u.al[1] байтам числа u.ax.
Комбинированное использование структуры и объединения:
Битовое поле – это элемент структуры, определенный как некоторое число битов. Они предназначены для экономного размещения в памяти данных небольшого диапазона, обеспечивают удобный доступ к отдельным битам данных.
Синтаксис объявления типа структуры с битовыми полями:
struct [ИмяСтруктуры] {
Тип1 ИмяПоля1 : ШиринаПоля1;
Тип2 ИмяПоля2 : ШиринаПоля2;
........................
ИмяПоляN : ШиринаПоляN;
} ИмяСтруктуры;
Тип – целый тип, возможно, со спецификатором unsigned.
Размещение в памяти битовых полей зависит от компьютера и компилятора. Поля могут размещаться как слева направо, так и справа налево.
Пример 11.2
Рассмотрим, как можно организовать в программе удобный доступ к отдельным битам однобайтовой переменной.
Для этого используется объединение, состоящее из поля типа unsigned char и структуры с битовыми полями (8 полей, ширина каждого поля – 1 бит).
Если вызвать эту функцию, например, так:
получим результат
Действительно, 70=1068=10001102
Задания для самостоятельной работы
1. Создайте структуру point, у которой 2 поля: x и y – координаты точки. Напишите функцию, которая вычисляет расстояние между двумя точками. Аргументами функции являются две структуры point.
2. Создайте структуру polygon, которая имеет 2 поля: n – тип многоугольника (возможные значения 2 (прямоугольник) и 3 (треугольник)), points – массив вершин многоугольника (3 значения). Прямоугольник будем задавать двумя точками: координатами левого верхнего и правого нижнего углов. Напишите функции, которые вычисляют площадь и периметр фигуры, заданной структурой polygon, и функцию вывода значений полей структуры на экран.
3. Создайте массив структур polygon. Напишите функцию, которая находит в массиве фигуру с наименьшей площадью. Параметром функции является массив фигур, результатом – найденная структура.