В простейших задачах каждый элемент данных представлен в виде переменной, определенной встроенным типом float, int, char, но при программировании реальных задач приходится иметь дело с объектами, организованными более сложно, в состав которых входит не одна переменная. В этом случае используется структурный тип данных.
Cтруктура - это совокупность элементов, каждый из которых может иметь любой тип кроме функции. В отличии от массива, который состоит из элементов одинакового типа, структура может состоять из разнотипных элементов.
Приведем простой пример использования структур. Если в программе необходимо использовать дату, то под каждое поле данных необходимо выделить отдельную переменную, например, так:
int day; // день
char month[10]; // месяц
int year; // год
Чтобы эти три переменные рассматривались как единое понятие «дата», их требуется объединить в структуру.
Первым шагом в создании взаимосвязанного множества переменных является определение структурного (пользовательского) типа данных. Определение дает структуре имя и указывает компилятору имя и тип каждого элемента (поля) структуры.
Пример: определение нового структурного типа date, состоящего из 3-х полей (элементов):
sruct date
{ int day;
char month[10]; // статический символьный массив
int year;
};
Синтаксис определения полей структуры аналогичен синтаксису определения переменной - необходимо указать тип данных каждого поля и размер всех строк и массивов.
Определение структуры не создает переменных, то есть не выделяет никакой памяти, а лишь задает структуру и, тем самым сообщает компилятору состав полей и размер новой структуры (пользовательского типа данный).
Определив структуру, можно пользоваться новым структурным типом данных - создавать объекты в памяти - переменные, указатели, массивы, и тому подобное. Название нового типа в нашем примере будет sruct date.
Можно совместить описание структуры и создание переменных (выделение памяти), например:
struct date
{ int day;
char month[10];
int year;
} a, b, c;
При этом выделяется соответствующая память под переменные a,b,c (каждая из переменных содержит по два int-поля и массив из 10 char-элементов ). После того, как новый тип (struct date) введен, его можно использовать для объявления структурных переменных в любом месте программы, например:
…
…
struct date d1;
Переменная d1 имеет тот же тип, что и a,b,c (struct date).
Переменные, подобные a, b, c называют объектами структурного типа или же структурными переменными, но чаще всего - структурами. Из-за этого может возникнуть некоторая терминологическая путаница. Обращаю ваше внимание, на то, что определение структуры – это создание нового типа данных (без выделения памяти), а объявление структуры – это выделение памяти под объект структурного типа.
Примеры использования структурного типа для создания различных объектов:
struct date b; // переменная-структура b
struct date week2[7]; // массив структур week2
struct date *poin_d ; // указатель point_d на структуру date