Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Тема 3.9 Структура как тип данных. Особенности применения структур и объединений



В языках Си/Си++ понятие структуры аналогично понятию записи (record) в Паскале. Это структурированный тип данных, представляющий собой поименованную совокупность разнотипных элементов. Тип структура обычно используется при разра­ ботке информационных систем, баз данных.

Сведения о выплате студентам стипендии требуется организовать в виде, показанном на рис. 3.

Элементы такой структуры (фамилия, курс, группа, стипендия) называются полями. Каждому полю должно быть поставлено в соответствие имя и тип.

Формат описания структурного типа следующий: struct имя_типа {определения_элементов}; В конце обязательно ставится точка с запятой (это оператор). Для рассмотренного примера определение соответствующего структурного типа может быть следующим:

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

struct student studl, stud2;

Правила Си++ разрешают в этом случае служебное слово struct опускать и писать student studl, stud2; Здесь studl и stud2 — переменные структурного типа.

Допускаются и другие варианты описания структурных переменных. Можно вообще не задавать имя типа, а описывать сразу переменные:

B этом примере кроме двух переменных структурного типа объяв­ лен указатель pst на такую структуру. В данном описании можно было сохранить имя структурного типа student.

Обращение к элементам (полям) структурной величины про­ изводится с помощью уточненного имени следующего формата: имя_структуры.имя_элемента

Снова все похоже на Паскаль. Примеры уточненных имен для описанных выше переменных: studl.fam; studl.stip

Значения элементов структуры могут определяться вводом, присваиванием, инициализацией. Пример инициализации в описании: student studl={"Кротов", 3, "Ф32", 350};

Пусть в программе определен указатель на структуру student *pst, studl; Тогда после выполнения оператора присваивания pst=&studl; к каждому элементу структурной переменной studl можно обращаться тремя способами.

Например, для поля fam studl.fam или (*pst).fam или pst->fam В последнем варианте используется знак операции доступа к элементу структуры: —>. Аналогично можно обращаться и к другим элементам этой переменной: pst->FIO, pst->grup, pst->stip. Поля структуры могут сами иметь структурный тип.

Такие величины представляют многоуровневые деревья. Допускается использование массивов структур. Например, сведения о 100 студентах могут храниться в массиве, описанном следующим образом: student stud[100]; Тогда сведения об отдельных студентах будут обозначаться, например, так: studfi].fam, stud[5].kurs и т.п. Если нужно взять первую букву фамилии 25-го студента, то следует писать: stud[25].fam[0].

Пример 1. Ввести сведения об N студентах. Определить фамилии студентов, получающих самую высокую стипендию. •include <stdio.h>

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

В качестве типа полей могут использоваться спецификаторы int, unsigned, signed. Минимальной величиной такого типа может быть структура, состоящая всего из одного битового поля.

Пример описания такой структуры:

Конечно, для переменной cod в памяти будет выделено 8 бит (1 байт), но использоваться будет только один первый бит.

Объединение. Объединение — это еще один структурированный тип данных. Объединение похоже на структуру и в своем описании отличается от структуры тем, что вместо ключевого слова struct используется слово union. union имя_типа {определения_элементов};

Объединение отличается от структуры способом организации во внутренней памяти. Все элементы объединения в памяти начинаются с одного байта.

Пусть в программе описана структура:

Элементы структуры занимают последовательные ячейки памяти с размером, соответствующим типу. Общий размер структуры равен сумме длин полей.

А теперь рассмотрим объединение со следующим описанием:

Поля объединения накладываются друг на друга. Общий объем занимаемой памяти равен размеру самого большого поля.

Изменение значения любого поля объединения меняет значения других полей.

В этой программе переменная-объединение и содержит два эле­ мента: символьное поле ch и битовую структуру cod, которые накладываются друг на друга. Таким образом, оказывается возможным получить доступ к каждому биту кода символа. Работа программы заканчивается после ввода символа q. Вот вариант результатов работы данной программы:





Дата публикования: 2015-02-18; Прочитано: 600 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...