Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_18-23_ПРОГР_MatiasRust_HD_CT_LE_LcMS.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
150.02 Кб
Скачать

Особенности применения

Переменная типа перечисления может принимать значения одной из именованных констант списка. Именованные константы списка имеют тип int.

Список-перечисления содержит одну или несколько конструкций вида:

идентификатор [= константное выражение]

Все идентификаторы в списке enum должны быть уникальными. В случае отсутствия константного выражения первому идентификатору соответствует значение 0, следующему идентификатору - значение 1 и т.д. Имя константы перечисления эквивалентно ее значению.

Следующему идентификатору в списке присваивается значение, на 1 большее предыдущего, если этот идентификатор не имеет своего константного выражения. Пример:

enum week { SUB = 0, /* 0 */

VOS = 3, /* 3 */

POND, /* 4 */

VTOR, /* 5 */

} rab_ned ;

enum week rab1;

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

Объявление

int A[20]; float A[];

Особенности применения

Элементами массива не могут быть функции и элементы типа void.

Отметим, что в языке СИ первый элемент массива имеет индекс равный 0. Примеры:

int w[3][3] = { { 2, 3, 4 },

{ 3, 4, 8 },

{ 1, 0, 9 } };

В последнем примере объявлен массив w[3][3]. Списки, выделенные в фигурные скобки, соответствуют строкам массива.

int b[2][3][4];

При обращении к массиву b можно написать, например, b[1][2] и будет передаваться вектор из четырех элементов, а обращение b[1] даст двухмерный массив размером 3 на 4.

Пример объявления символьного массива. char str[] = "символьный массив";

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

Структуры

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

Объявление

struct Point {float x,y,z; int N;} P1,P2; struct Point P3,P4;

struct {float x,y,z; int N;} P1,P2,P3,P4;

Особенности применения

Ниже рассматривается использование рекурсивных тегов структуры.

struct node { int data; struct node * next; } st1;

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

Доступ к компонентам структуры осуществляется с помощью указания имени структуры и следующего через точку имени выделенного компонента, например: P1.x=10;

Объединения (union) подобны структуре, однако в каждый момент времени может использоваться только один из элементов объединения. Тип объединения может задаваться в следующем виде:

union { описание элемента 1; ... описание элемента n; };

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

Доступ к элементам объединения осуществляется тем же способом, что и к структурам

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

union {int ax; char al[2];} ua;

Объединение ua позволяет получить отдельный доступ к младшему ua.al[0] и к старшему ua.al[1] байтам двухбайтного числа ua.ax .

Поля битов

Элементом структуры может быть битовое поле, обеспечивающее доступ к отдельным битам памяти. Вне структур битовые поля объявлять нельзя. Нельзя также организовывать массивы битовых полей и нельзя применять к полям операцию определения адреса.

Объявление

struct { unsigned A: 5; unsigned B: 3; }

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

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

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

Переменные с изменяемой структурой

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

struct figure {

double area,perimetr; /* общие компоненты */