Книга: Язык Си - руководство для начинающих
ВЛОЖЕННЫЕ СТРУКТУРЫ
ВЛОЖЕННЫЕ СТРУКТУРЫ
Иногда бывает удобно, чтобы одна структура содержалась или была "вложена" в другую. Например, Шалала Пироски строит структуру, содержащую информацию о ее друзьях. Один элемент структуры - это, конечно, имя друга. Однако имя можно представить самой структурой с разными элементами для имени и фамилии. На рис. 14.4 приведен сокращенный пример деятельности Шалалы.
/* пример вложенной структуры */
#define LEN 20
#define M1 "Спасибо за прекрасный вечер,"
#define M2 "Вы, конечно, правы, что"
#define M3 " -своеобразный парень. Мы должны собраться"
#define М4 " отведать очень вкусный"
#define M5 "и немного повеселиться."
struct names { /*первый структурный шаблон */
char first[LEN];
char last[LEN], };
struct guy { /* второй шаблон */
struct names handle; /* вложенная структура */
char favfood[LEN];
char job[LEN];
float income;
};
main( ) {
static struct guy fellow = { /*инициализация переменной */
{" Франко," " Уотэл"},
" баклажан",
" вязальщик половиков",
15435.00 };
printf("Дорогой %s, n n," fellow.handle.first);
printf(" %s %s.n", M1, fellow.handle.first);
printf(" %s %sn" , M2, fellow.job);
printf(" %s n" , M3);
printf(" %s %s %snn", M4, fellow.favfood, M5);
printf(" %40s %s n", " " , " До скорой встречи" );
printf(" %40s %sn", " ", Шалала");
}
РИС. 14.4. Программа вложенной структуры.
Вот результат работы программы:
Дорогой Франко,
Спасибо за прекрасный вечер, Франко.
Bы, конечно, правы. что вязальщик половиков - своеобразный парень.
Мы должны собраться отведать очень вкусный баклажан и немного повеселиться.
До скорой встречи,
Шалала
Во-первых, следует рассказать о том, как поместить вложенную структуру в шаблон. Она просто описывается точно так же, как это делалось бы для переменной типа int:
struct names handle;
Это означает, что handle является переменной типа struct names. Конечно, файл должен также содержать шаблон для структуры типа names.
Во-вторых, следует рассказать, как мы получаем доступ к элементу вложенной структуры. Нужно дважды использовать операцию "." :
fellow.handle.first = = " Франко";
Мы интерпретируем эту конструкцию, перемещаясь слева направо;
(fellow.handle).first
То есть первым находим элемент fellow, далее элемент handle структуры fellow, а затем его элемент first. Теперь рассмотрим указатели.
- ТИПОВАЯ ЗАДАЧА: ИНВЕНТАРИЗАЦИЯ КНИГ
- УСТАНОВКА СТРУКТУРНОГО ШАБЛОНА
- ОПРЕДЕЛЕНИЕ СТРУКТУРНЫХ ПЕРЕМЕННЫХ
- ДОСТУП К ЭЛЕМЕНТАМ СТРУКТУРЫ
- МАССИВЫ СТРУКТУР
- ВЛОЖЕННЫЕ СТРУКТУРЫ
- УКАЗАТЕЛИ НА СТРУКТУРЫ
- II. ОПЕРАЦИЯ КОСВЕННОГО ПОЛУЧЕНИЯ ЭЛЕМЕНТА: ->
- ПЕРЕДАЧА ИНФОРМАЦИИ О СТРУКТУРАХ ФУНКЦИЯМ
- СТРУКТУРЫ: ЧТО ДАЛЬШЕ?
- ОБЪЕДИНЕНИЯ - КРАТКИЙ ОБЗОР
- typedef - КРАТКИЙ ОБЗОР
- ПРИЧУДЛИВЫЕ ОПИСАНИЯ
- ЧТО ВЫ ДОЛЖНЫ БЫЛИ УЗНАТЬ В ЭТОЙ ГЛАВЕ
- ВОПРОСЫ И ОТВЕТЫ
- УПРАЖНЕНИЯ
- 14. Структуры и другие типы данных
- 6.5. Файловые структуры
- Вложенные циклы For... Next
- Изменение структуры индекса
- 9.6. Вложенные операторы try
- Вложенные управляющие структуры
- 1.4 Структуры данных, связанные с драйверами устройств Windows
- Практическая работа 35. Создание структуры документа и вставка оглавления
- Разработка структуры базы данных
- 8.1.1. Вложенные функции
- 6.2. Типы и структуры данных
- Ветвящиеся структуры – архитектура мира растений