logo
Подбельский Фомин_Программирование на языке СИ_

Определение структур.

Определение структур. Определения элементов (компонентов) структурного типа внешне подобны определениям данных соответствующих типов. Однако имеется существенное отличие. При определении структурного типа его компонентам не выделяется память, и их нельзя инициализировать. Другими словами, структурный тип не является объектом.

Из нашего примера определения структурного типа с названием goods следует, что наименование товара будет связано с указателем типа char*, имеющим имя name. Оптовая цена единицы товара будет значением элемента типа long с названием price. Торговая наценка будет значением элемента типа float с именем percent и т.д. Все это следует из приведенного определения структурного типа с названием goods. Но прежде чем элементы, введенные в определении структурного типа, смогут получить значения, должна быть определена хотя бы одна структура (т.е. структурированный объект) этого типа. Например, следующее определение вводит две структуры, т.е. два объекта, типа goods:

Итак, если структурный тип определен и известно его имя, то формат определения конкретных структур (объектов структурного типа) имеет вид:

struct имя_структурного_типа список_структур;

где список_структур - список выбранных пользователем имен (идентификаторов).

Выше показано, что для структурного типа, имя которого введено с помощью служебного слова typedef, определение структур не должно содержать спецификатора типа struct. Например, указатель на структуры для представления комплексных чисел с помощью определенного выше обозначения структурного типа complex можно определить так:

Выше был определен структурный тип "рациональная дробь", для которого введены два имени. С их помощью так вводятся конкретные структуры:

Кроме изложенной последовательности определения структур (определяется структурный тип, затем с использованием его имени определяются структуры) в языке Си имеются еще две схемы их определения. Во-первых, структуры могут быть определены одновременно с определением структурного типа:

struct имя_структурного_типа

{ определения_элементов }

список_структур;

Пример одновременного определения структурного типа и структур (объектов):

Здесь определен структурный тип с именем student и три конкретные структуры student_l, student_2, student_3, которые являются полноправными объектами. В каждую из этих трех структур входят элементы, позволяющие представить имя (name), фамилию (surname), курс (year), на котором обучается студент.

После приведенного определения в той же программе можно определять любое количество структур, используя структурный тип student:

Следующий вариант определения структур является некоторым упрощением приведенного варианта. Дело в том, что можно определять структуры, приведя "внутреннее строение" структурного типа, но не вводя его названия. Такой безымянный структурный тип обычно используется в программе для однократного определения структур:

struct

{ определения_элементов }

список _структур;

В качестве примера определим структуры, описывающие конфигурацию персонального компьютера с такими характеристиками:

• тип процессора (char [10]);

• рабочая частота в МГц (int);

• объем основной памяти в Мбайтах (int);

• емкость жесткого диска в Мбайтах (int).

Пример определения структур безымянного типа:

В данном случае введены три структуры (три объекта) с именами IBM_486, IBM_386, Compaq. В каждую из определенных структур входят элементы, в которые можно будет занести сведения о характеристиках конкретных ПЭВМ. Структурный тип "компьютер" не именован. Поэтому, если в программе потребуется определять другие структуры с таким же составом элементов, то придется полностью повторить приведенное выше определение структурного типа.