Записи и объединения. Декларация и инициализация записей
Декларация и инициализация записей
Описание структурных переменных выполняется в два шага:
· Задание шаблона.
· Собственно описание переменных.
В пределах своей области известности имя шаблона должно быть уникальным. Допускается определение только одного шаблона в своей области известности без имени. Имена шаблонов сравниваются компилятором только между собой. Имя шаблона может совпадать с метками или именами переменных и это не является ошибкой.
Синтаксис шаблона:
struct[имя_шаблона]{тип1 имя_поля1;
тип2 имя_поля2;
…………….
типN имя_поляN;};
имя_поля может быть задано списком
Пример
struct book{char author[20];
char title[50];
int year;
float price;};
Память не резервируется. Информация о типе попадает в таблицы компилятора.
Шаблон, описанный в пределах блока {} не видим извне, а только внутри блока. Как только задан шаблон, то может описываться структурная переменная.
Пример
Описание структурной переменной может быть совмещено с заданием шаблона
struct book{ char author[20];
char title[50];
int year;float price; }; first_book, child_book
Здесь first_book, child_book структурные переменные
struct book third_book;
Для инициализации записей используется список инициализации, в котором указываются значения для любого поля. Пропуск значения указывается запятой или отсутствием элементов хвоста списка инициализации. Для вложенных структур применяются подсписки вида {…} внутри списков {…}.
Пример
struct book
first_book = {“Чень Ч., Ли Р.”,
“Математическая логика …”,
1983, 2.20},
child_book = {“”, “Сказания и мифы”, 1984, };
Некоторые поля структурной переменной в свою очередь могут быть структурными переменными и тогда в списке инициализации должны появиться для этих полей вложенные скобки: {…, {…}, …}.
Для упрощения описания структурных переменных можно использовать оператор typedef (описание собственного типа). На самом деле вводится только имя типа.
Пример
typedef struct UDC{char class, subclass;
int number;} T_UDC;
typedef struct { char author[20];
char title[50];
int year; float price} T_BOOKS;
В данном примере UDC имя структуры, во втором примере имя шаблона не указано. T_UDC и T_BOOKS имена новых структурных типов. Определим новый тип с двумя вложенными структурными полями:
typedef struct {T_UDC idinf;
T_BOOKS maininf;} MY_BOOKS;
Объявление переменных в программе можно сделать следующим образом:
MY_BOOKS first_book, second_book;
Ограничение: Структура не может вкладываться сама в себя
Контрпример. Ошибка!
struct book { struct book my_own;
char author[20];
char title[50];
int year; float price; };
Дата добавления: 2016-05-26; просмотров: 1287;