Структуры
Рассмотрим новый тип данных - структуру. Он не только гибок для представления разнообразных данных, но и позволяет создавать новые типы данных.
Пример использования - создание каталога книг. Каждая книга имеет следующие атрибуты: шифр, название, автора, издательство, год издания, число страниц, тираж, цену. Это несколько массивов. Очень сложно организовать одновременную работу с каталогом, если нужно их упорядочить по названиям, авторам, цене и так далее. Лучше иметь один массив, в котором каждый элемент содержит всю информацию о книге.
Структура – это объект, состоящий из последовательностей поименнованных элементов. Каждый элемент имеет свой тип.
Для определения нового типа данных нужно его описать:
struct book {
char title [81];
char author[30];
float value;
};
book – это имя нового типа данных.
Сруктурный шаблон является основной схемой, описывающей, как образуется новый тип. struct - ключевое слово, имя типа структуры book - необязателен, если сразу определить имя переменной, то его можно не вводить.
|
|
struct {
char title [81];
char author[30];
float value;
}libry;
Каждый элемент структуры определяется своим собственным описанием. Это переменные и массивы стандартных типов данных.
Шаблон является схемой без содержания. Он сообщает компилятору, как сделать что-то, но ничего не делает в программе, а вот создание структурной переменной, это и есть смысл слова «структура». Согласно шаблону под эту переменную выделяется память, равная сумме всех элементов (81).
struct book играет ту же роль, что и int, float перед именем переменной.
struct book doyle, panshin;
Для доступа к элементам структурной переменной используется операция точка. Имя переменной, точка, имя элемента структуры.
void main(void) {
struct book libry; //описание перем-й типа book
puts("Введите название книги");
gets(libry.title);
puts("Введите фамилию автора");
gets(libry.author);
puts("Введите цену книги");
scanf("%f",&libry.value);
printf("%s, %s, %p.2f",libry.title,libry.author,libry.value);
}
Структурную переменную можно инициализировать:
struct book libry={"Руслан и Людмила", "А.С.Пушкин", 1.50};
Если переменных типа структура много, то определяется массив структур.
void main(void){
struct book libry[100];
int i;
for(i=0; i<100; i++){
puts("Введите название книги");
gets(libry[i].title);
puts("Введите автора книги");
gets(libry[i], author);
puts("Введите цену книги");
scanf("%f",&libry[i].value);
}
}
Индекс применяется к имени массива структур libry[i].
Если libry[2].title[3] – это 4-й элемент в title в 3-й структуре типа book.