Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
В языках Си/Си++ понятие структуры аналогично понятию записи (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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!