Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
вопрос2.docx
Скачиваний:
3
Добавлен:
29.07.2019
Размер:
45.98 Кб
Скачать

ВОПРОС№1 Структура является совокупностью элементов (полей) произвольных типов. Они широко используются при формировании баз данных в некоторой предметной области. Формат объявления структуры:

struct имя_структуры

{ тип_поля_1 имя_поля_1;

тип поля_2 имя_поля_2;

тип поля_N имя_поля_N;

} список_переменных;

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

Объекты типа структура можно присваивать, передавать как параметры функции и возвращать из функции в качестве результата. Остальные такие операции, как сравнение (== и !=) не определены. Размер пременной структурного типа нельзя вычислить просто как сумму его членов.

ВОПРОС№2 Битовое поле является модификацией структуры в языке С, которое позволяет хранить массив полей, имеющих длину в один или несколько байт, внутри непрерывной последовательности. Битовые поля активно используются для хранения состояния группы различных логических переключателей (флагов). В них каждый бит кодирует состояние соответствующего номера поля: например, 1 – включено, 0 – выключено. Эффективно использование битовых полей при передаче данных по линиям связи.

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

struct имя_битового_поля

{ тип_поля имя_поля : длина_поля ;

} список_переменных;

Тип поля указывается в зависимости от длины поля. Если длина в один байт, то следует указать unsigned (беззнаковый), при длине в два и более байта – знаковый. Длина полей может быть от 1 до 32.

Пример объявления битового поля для контроля состояния внешнего периферийного устройства:

struct status

{ unsigned enabled : 1; /* признак включения устройства */

unsigned ready : 1; /* режим чтения данных с устройства */

unsigned write : 1; /* режим записи данных в устройство */

unsigned error : 1; /* сбой в работе устройства */

};

Вопрос№3 Объединения Тип данных, позволяющий нескольким переменным различных типов занимать одну область памяти. Объявление объединения производится с помощью слова union аналогично структуре:

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

{ тип_поля_1 имя_поля_1;

тип поля_2 имя_поля_2;

тип поля_N имя_поля_N;

} список_переменных;

Пример объединения для преобразования целого типа в символьный:

union charint

{ int i; /* данные типа int */

char c[2]; /* символьные данные */

}; /* charint */

Для работы с объединениями необходимо описывать переменные объявленного ранее типа объединения. Формат объявления переменной объединения:

имя_типа_объединения имя_переменой;

Пример: charint x;

Объединения используются для преобразования типов данных.

Вопрос№4 Тип перечисления

Этот тип в языках С и С++ описывает перечисления – набор именованных целочисленных констант. Объявляется перечисление с помощью зарезервированного слова enum в следующем формате

enum имя_перчисления {нумеератор1, нумеератор2, } имя_переменной;

Например enum Tdays {sun, mon, tues, wed, thur, fri, sat} anyday;

устанавливает тип Tdays, переменную anyday этого типа и набор нумераторов (sun, mon, ...), которым соответствуют целочисленные константы

ее нумераторов. Таким образом,

anyday = mon; // так можно

В С++ имя перечисления, следующее за словом enum, можно опустить, если в пределах данного контекста имя переменной не дублируется. В этом случае используется так называемый анонимный перечислимый тип, пример:

enum { sun, mon, tues, wed, thur, fri, sat } anyday; // анонимный тип enum

Нумераторы, перечисленные внутри фигурных скобок, называются перечислимыми константами.

ВОПРОС№5 Динамические переменные, в отличие от ранее рассматриваемых статических переменных, размещают данные при выполнении программы в свободной области оперативной памяти компьютера

Создав динамическую переменную, программа резервирует под нее часть ресурсов динамической памяти. Если динамическая переменная больше не нужна, она уничтожается с помощью соответствующей функции.

Динамическое распределение памяти в языке С реализуется в модуле stdlib.h с помощью функций:

- malloc – создание динамической переменной указанного размера в формате;

указатель = (базовый_тип *) malloc(число_байт_под_данные)

- free(указатель) – удаление динамической переменной.

Число байт под данные можно определить используя функцию sizeof.

Пример объявления динамической переменной-вектора из 10 значений типа float с проверкой успешного создания

float *pfd; /* создание указателя */

if((pfd = (float *) malloc(10*sizeof(float)))==NULL)

{ printf(“\nМало свободной памяти”);

getch();

return -1;

} // if

free(pfd); /*уничтожение указателя */

В языке С++ для этих целей используются операторы new и delete. Создание динамической переменной выполняется в форме

указатель = new тип_переменной;

Удаление динамической переменной

delete переменная_указатель;

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

delete [] указатель_массива;