Типы данных, создаваемые пользователем: структуры, перечисления, объединения, битовые поля

Автор работы: Пользователь скрыл имя, 20 Мая 2013 в 10:57, доклад

Описание работы

Структура – составной тип данных, который может содержать элементы разных типов. Структуры позволяют группу связанных между собой переменных трактовать не как множество отдельных элементов, а как единое целое.
Элементы структуры также называют полями или членами.
Элементами структур могут быть данные любых типов, за исключением функций и структур того же типа, что и определяемый тип.

Файлы: 1 файл

Семинар 11.doc

— 170.00 Кб (Скачать файл)

Семинар 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. Напишите функцию, которая находит в массиве фигуру с наименьшей площадью. Параметром функции является массив фигур, результатом – найденная структура.

 


Информация о работе Типы данных, создаваемые пользователем: структуры, перечисления, объединения, битовые поля