- •Вопрос№3 Объединения Тип данных, позволяющий нескольким переменным различных типов занимать одну область памяти. Объявление объединения производится с помощью слова union аналогично структуре:
- •Вопрос№4 Тип перечисления
- •Вопрос№6Совместимость и преобразование типов данных
- •6.10.1 Основные понятия совместимости типов
- •Вопрос№9 Передача данных в параметрах по значению
- •Вопрос№10 Передача данных в параметрах по ссылке
- •Вопрос№11 Параметры по умолчанию
- •Вопрос№12 Параметры функции main
- •Вопрос№13 Параметры-массивы и параметры-структуры
- •Вопрос№23 Множественное наследование
ВОПРОС№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 [] указатель_массива;