Поскольку структура - это новый тип данных, его надо предварительно объявить в начала
программы, например так
struct Book {
char author[40]; // автор, символьная строка
char title[80]; // название, символьная строка
Int year; // год издания, целое число
Int pages; // количество страниц, целое число
};
При таком объявлении типа никакая память не выделяется, реальных структур в памяти еще нет. Этот фрагмент просто скажет компилятору, что в программе могут быть элементы такого типа. Теперь, когда надо выделить память, мы напишем
Book b;
Это оператор выделяет место в памяти под одну структуру типа Book и дает ей имя b (таким образом, Book – это названия типа данных (как int или float), а b – это имя конкретного экземпляра). При этом можно сразу записать в память нужное начальное значение всех или нескольких первых элементов структуры в фигурных скобках через запятую. Поля заполняются последовательно в порядке их объявления. Память, отведенная на поля, оставшиеся __________незаполненными, обнуляется.
Book b = {
"А. С. Пушкин",
|
|
"Полтава",
1998 };
Работа с полями структуры
Обращение по имени
Для обращения ко всей структуре используется ее имя, а для обращения к отдельному полю имя этого поля ставится через точку. Элементы структуры вводятся последовательно по одному. Заполнять их можно в любом порядке. С полем структуры можно работать так же, как и с переменной соответствующего типа: числовые переменные могут участвовать в арифметических выражениях, со строками можно выполнять все стандартные операции.
Book b;
strcpy (b.author, " А.С. Пушкин ");
b.year = 1998;
Обращение по адресу
Пусть известен адрес структуры в памяти. Как известно, адрес может быть записан в указатель – специальную переменную для хранения адреса. Для обращения к полю структуры по ее адресу используют специальный оператор ->.
Book b; // структура в памяти
Book *p; // указатель на структуру
p = &b; // записать адрес структуры в указатель
strcpy (p->author, "А.С. Пушкин"); // обращение по адресу
p->year = 1998;
Ввод и вывод