Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР6-1.doc
Скачиваний:
1
Добавлен:
13.11.2018
Размер:
79.36 Кб
Скачать

Лабораторная работа №6

Создание пользовательских типов

1. Цель работы

Изучение способов создания пользовательских типов и приобретение навыков работы с ними.

2. Краткие теоретические сведения

В языке С существует пять способов создания пользовательских типов:

1) структура (structure) – агрегированный (или составной) тип данных, позволяющий объединить группу разнотипных переменных под одним именем;

2) битовое поле (bit-field) – вариант структуры, позволяющий работать с отдельными битами;

3) объединение (union) – позволяет использовать одну и ту же область памяти для хранения нескольких переменных разного типа;

4) перечисление (enumeration) – список именованных целочисленных констант;

5) ключевое слово typedef – присваивание существующему типу нового имени.

2.1. Структуры

2.1.1. Определение структурных переменных

Структура объединяет логически связанные данные разных типов. Структурный тип данных определяется следующим описанием:

struct имя_типа_структуры {

тип_элемента имя_элемента; /*Описание элементов структуры*/

тип_элемента имя_элемента;

};

Пример:

struct dinner {

char *place;

float cost;

};

Структурная переменная описывается с помощью структурного типа данных.

struct имя_типа_структуры имя_структурной_переменной;

Примеры:

struct dinner week_days [7]; /* массив структур */

struct dinner best_one; /* одна структурная переменная */

struct dinner *p; /* указатель на структурную переменную */

Одновременно с определением структурного типа данных (структуры) можно объявить несколько ее экземпляров – структурных переменных:

struct имя_типа_структуры {

тип_элемента имя_элемента; /*Описание элементов структуры*/

тип_элемента имя_элемента;

} имена_структурных_переменных;

Пример:

struct dinner {

char *place;

float cost;

struct dinner *next;

} Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday;

2.1.2. Доступ к компонентам структуры

Доступ к компонентам структуры осуществляется с помощью специального обозначения для выделенного компонента, имеющего следующий вид:

s.c

где s является именем структуры или значением структуры с компонентом c. s может быть выражением, дающим в результате значение структуры. Например, s может быть вызовом функции со структурой в качестве ее значения. К компонентам определенной выше структуры Monday можно обратиться, указав их обозначения:

Monday.place

Monday.cost

2.1.3. Поля битов в структурах

Поле битов - это элемент структуры, определенный как некоторое число бит, обычно меньшее, чем число бит в целом числе. Поля битов предназначены для экономного размещения в памяти данных небольшого диапазона.

Пример:

struct bfeg {

unsigned int bf_flg1 : 10;

unsigned int bf_flg2 : 6;

};

Данная структура описывает 10-битовое поле, которое для вычислений преобразуется в значение типа unsigned int, и 6-битовое поле, которое обрабатывается как значение типа unsigned int.

2.2. Объединения

Объединение описывает переменную, которая может иметь любой тип из некоторого множества типов.

Определение объединенного типа данных аналогично определению структурного типа данных:

union имя_объединения {

Описания_элементов

};

Пример:

union bigword {

long bg_long;

char *bg_char [4];

};

Данные типа union bigword занимают память, необходимую для размещения наибольшего из своих элементов, и выравниваются в памяти к границе, удовлетворяющей ограничениям по адресации как для типа long, так и для типа char *[4].

Описание переменной объединенного типа:

Пример:

union bigword x;

union bigword *p;

union bigword a[100];

2.3. Перечисления

Данные перечислимого типа относятся к некоторому ограниченному множеству данных.

Определение перечислимого типа данных:

enum имя_перечислимого_типа {

Список_значений

};

Каждое значение данного перечислимого типа задается идентификатором.

Пример:

enum color {

red, green, yellow

};

Описание переменной перечислимого типа:

enum color chair;

enum color suite [40];

Использование переменной перечислимого типа в выражении.

Пример:

chair = red;

suite[5] != yellow;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]