Структура- это производный тип языка Си, включающий в себя множество элементов, элементы следуют в памяти друг за другом и могут быть разнотипными.
Формат определения структуры следующий:
struct [<имя_структурного_типа>]
{
….. // Объявления полей структуры
} [<имя_переменной_струрного_типа>];
Пример:
{
int x; // Поле структуры
float y; // Поле структуры
};
После объявления структуры имя структуры является именем нового типа. Аналогично переменным стандартных типов могут объявляться переменные структурного типа, при этом каждая переменная структурного типа имеет свои копии полей структуры в оперативной памяти. Также можно объявлять указатели на структуры, массивы структур, полями структуры могут быть массивы или указатели.
A a1, a2; // Объявление переменных структурного типа
Примечание. Такой формат определения переменных структурного типа разрешен в языке Си++ в исходном Си стандарта ANSI требуется при подобном объявлении переменных структурного типа дополнительно указывать ключевое слово struct:
struct A a1, a2; // Объявление переменных структурного типа в Си стандарта ANSI
Разрешено объявлять переменные структурного типа одновременно с объявлением структуры и также, если далее переменные этого типа не будут создаваться, то имя структуры может отсутствовать.
{
int x; // Поле структуры
float y; // Поле структуры
} a1, a2; // Объявлении переменных одновременно со структурой
Или
struct // Имя структуры отсутствует, далее переменные этого типа не могут создаваться
{
int x; // Поле структуры
float y; // Поле структуры
} a1, a2; // Объявлении переменных одновременно со структурой
Обращение к полям структуры производится с помощью операции «.» - обращение к полю структуры через имя переменной, или операции «->» -обращение к полю структуры через указатель.
a1.x=10; a1.y=1.5;
A *pA=&a1; // Указатель на структуру
pA->x=11; // или (*pA).x=11;
Переменная структурного типа может быть определена с инициализацией полей. Инициализация структуры похожа на инициализацию массива. Например:
struct BOOK // Структура описывает некоторую книгу
{
char * author; // Имя автора книги
char *title; // Заголовок книга
char *firm; // Название издательства
int year, page; // Год издания и число страниц
};
BOOK book1={ “Керниган Б., Ритчи Д.”,
“Язык программирования С”, “ М.: Издательский дом «Вильямс»”, 2009, 304};