Если массив – это совокупность однотипных элементов, то структура объединяет логически связанные данные разных типов.
При использовании структурных переменных вначале нужно описать тип (или шаблон) структуры, а затем структурные переменные. Тип структуры задает порядок следования отдельных элементов (полей) в структуре и их типы. Описание структурного типа имеет вид:
};
Точка с запятой в конце описания обязательна. Например:
struct ANKETA
{ char fio[20]; /* фамилия и инициалы */
int gr; /* год рождения */
char adr[40]; /* адрес */
};
struct BOOK
{ char author[40]; /* автор книги */
char name [50]; /* название */
int year; /* год издания */
int pages; /* число страниц */
};
Здесь ANKETA и BOOK - это имена типов структур, а не переменных. При описании типов память под структуры не выделяется.
Описание структурной переменной на языке C имеет вид:
struct имя_типа имя_переменной;
Например:
struct ANKETAa1;
struct BOOK b1,b2;
struct BOOKmb[100]; /* массив из 100 структур типа BOOK*/
struct ANKETA*p1; /* указатель на структуру типа ANKETA */
struct BOOK*p2 = &b2; /* указатель на структуру типа BOOK,
ссылающийся на переменную b2 */
При объявлении структурных переменных на языке C++ ключевое слово struct обычно опускается, например:
ANKETAa1;
BOOK b1,b2;
Каждая структурная переменная будет состоять из полей, перечисленных при описании типа структуры.
a1 b1 b2
fio author author
gr name name
adr year year
pages pages
При объявлении структурных переменных можно их инициализировать, например:
struct BOOK b3 = { “Толстой Л.Н.”, ”Война и мир”, 1995, 1650};
Для однотипных структур определена операция присваивания.
Пример:
b1=b3;
mb[0]=b3;
Другие операции целиком над структурами выполнять нельзя. Например, сравнение структур или ввод/вывод нужно выполнять поэлементно.
Для обращения к отдельным элементам (полям) структурных переменных используется операция выбора “.” или “->” :