- •Создание простой структуры.
- •Инициализация структуры.
- •Передача структур в функции.
- •Описание массива структур.
- •Определение элементов массива структур.
- •Вложенные структуры. Иногда бывает удобно, когда одна структура содержит другую.
- •Описание и инициализация указателя на структуру.
- •Доступ к элементу структуры при помощи указателя.
- •Передача информации о структурах функциям. Использование элементов структуры.
- •Передача информации о структурах функциям. Использование элементов структуры.
- •Передача информации о структурах функциям. Использование адреса структуры.
- •Передача информации о структурах функциям. Использование массива.
- •Имя массива можно использовать для передачи в функцию указателя на первую структуру в массиве.
- •Затем можно использовать арифметическую операцию над указателем, чтобы передвигать его на последующие структуры в массиве.
- •Структуры и битовые поля.
- •Структуры. Их дальнейшее использование.
- •Объединения.
- •Объединения: синтаксис и правила.
- •Создание простого объединения.
- •Вспомогательные средства.
- •Использование typedef.
- •Сложные формы данных.
- •Использование enum.
Структуры и другие типы данных. Структуры С и C++: синтаксис и правила. Создание простой структуры.
Структура С или C++ аналогична массиву или вектору тесно связанных атрибутов. структура позволяет иметь смешанные атрибуты различных типов данных.
Структура позволяет хранить различные типы данных, включай структуры, массивы, собственные типы данных и др.
В языках С или C++ структура создается при помощи ключевого слова struct, за которым следуют необязательное поле тега (tag) и список элементов структуры.
struct поле_тега {
тип_элемента элемент 1;
тип_элемента элемент 2;
тип_элемента элемент З;
...
...
...
тип_элемента_элемент N;
};
Описание структуры является оператором С и C++.
в C++, отсутствует необходимость повторять ключевое слово struct.
Создание простой структуры.
#include<stdio.h>
#include<windows.h>
#define N 30
#define ABR 4
struct month {
int poriadok;
char nazvanie[20];
char abr[4];
int dni;
}month={ 7,
"Июль",
"июл",
31
};
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
printf("%d. %s Количество дней: %d Сокращенно: %s\n", month.poriadok, month.nazvanie, month.dni, month.abr);
}
Доступ к элементам структуры. Инициализация структуры. Передача структур в функции.
Доступ к элементам структуры.
Любой элемент структуры может обрабатываться программой самостоятельно.
Для доступа к элементам структуры можно использовать:
. («точка»)
->
Синтаксис операции«точка»:
stname.mname
В этой записи stname является переменной, связанной со структурным типом, а mname — это имя любой переменной-члена структуры.
Элементы структуры обрабатываются так же, как и любые другие переменные С или C++; необходимо только всегда использовать операцию "точка".
Существуют различия в описании структур в языках С и С++. В C++, отсутствует необходимость повторять ключевое слово struct при объявлении переменной некоторого структурного типа.
Инициализация структуры.
Инициализации структуры аналагична инициализации простых переменных или массивов.Допускается выполнение инициализации элементов структуры. Классы памяти оказывают влияние на структуры аналогично обычным идентификаторам.
Можно ли инициализировать и структурную переменную? Да, если структурная переменная будет внешней или статической.Здесь следует иметь в виду, что принадлежность структурной переменной к внешнему типу зависит от того, где определена переменная, а не где определен шаблон.
Передача структур в функции.
Очень часто необходимо передать в функцию информацию о структуре; при этом информация передается по значению. Поскольку передается только копия информации, функция не может изменить содержимое исходной структуры. Структуру можно передать в функцию при помощи, следующей синтаксической конструкции:
fname(stvariable);
/* Объявление структуры, допустимое в С и C++ */
void vprint_data(struct stboat stany_boat);
// Объявление структуры, возможное только в C++//
void vprint_data(stboat stany_boat);
Если передавать полные копии структур в функции, то нередко можно снизить эффективность программы. В приложениях, критичных ко времени, лучше использовать указатели.
Массив структур. Описание массива структур. Определение элементов массива структур.
Часто структуры рассматриваются как массивы разнотипных данных.
Описание массива структур.
Процесс описания массива структур совершенно аналогичен описанию любого другого типа массива:
structbooklibry [MAXBKS];
Этот оператор объявляет libry массивом, состоящим из MAXBKS-элементов. Каждый элемент массива представляет собой структуру типа book. Имя libry само по себе не является именем структуры; это имя массива, содержащего структуры.
Определение элементов массива структур.
При определении элементов массива структур мы применяем те же самые правила, которые используются для отдельных структур: сопровождаем имя структуры операцией получения элемента и именем элемента:
libry [0].valuevalue — первый элемент массива
libry [4].titletitle — пятый элемент массива
Заметим, что индекс массива присоединяется к libry, а не к концу имени:
libry.value[2] /* неправильно */
libry[2].value /* правильно */
индексы, находящиеся справа от операции ".", относятся к отдельным элементам, в то время как индексы, расположенные слева от операции, относятся к массивам структур.
Вложенные структуры.