На этом шаге мы рассмотрим различные способы задания структур.
Структуры - это такие конструкции языка С, которые объединяют в данные разных типов, в т. ч. и подструктуры (такие же структуры, но являющиеся членами главной структуры). Эти конструкции полезны тем, что во многих ситуациях позволяют группировать связанные данные таким образом, что с ними можно работать как с единым целым. Как объявляется структура покажем на примере объявления данных некоторого человека:
struct man { char name[80]; //имя char phone_number[80]; //телефон int age; //возраст int height; //рост };
Так задается шаблон будущего экземпляра структуры. Здесь man - имя шаблона. То, что находится в теле, ограниченном фигурными скобками, - эте члены структуры-шаблона (под такое объявление компилятор память не выделяет). На основе такого шаблона создается экземпляр структуры, под который память уже выделяется и с которым можно работать в программе. Экземпляры структуры создаются несколькими путями:
struct man friends[100],others;
Здесь созданы два экземпляра структуры: один - это массив структур (каждый элемент такого массива представляет собой структуру шаблон man. Можно сказать так: friends - это переменная типа man), другой - обычный экземпляр по шаблону man. В языке C++ ключевое слово struct можно опускать;
struct man { char name[80]; char phone_number[80]; int age; int height; }others;
Здесь создан один экземпляр структуры - others;
typedef struct { char name[80]; char phone_number[80]; int age; int height; } NewTemp1;
Теперь можно писать: NewTemp1 d1, d2[20], *p; (все эти переменные - типа NewTemp1). Здесь объявлено три переменных типа NewTemp1: экземпляр d1 структуры шаблона man, массив структур d2[20] и р - указатель на структуру.
Приведем пример вложенной структуры, т. е. такой структуры, которая является членом другой структуры:
struct date { int day; //день недели int month; //номер месяца int year; //год char monthname[4]; //название месяца }; struct person { char name[30]; //имя char adress[70]; //домашний адрес long mailcod; //почтовый код float salary; //заработная плата date birthdate; //дата рождения date hiredate; //дата поступления на работу }emp[1000],*р;
Это типичный пример объявления личной карточки работника (реальная карточка содержит намного больше данных). Здесь объявлен указатель на структуру и массив структур шаблона person. Если такой массив заполнить получим данные на 1000 работников.
На следующем шаге мы рассмотрим обращение к элементам структур.