Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Структуры, объединения, перечисления
Все данные, с которыми работает программа можно разделить на две группы: · простые; · структурированные. Из рассмотренных ранее типов данных к структурированным типам относятся массивы, остальные типы данных – простые – не имеющие внутренней структуры. Структуры и объединения относятся к структурированным (конгломератным) типам данных, определяемых программистом. Структуры Определение структур Структуры представляют собой группы связанных между собой, как правило, разнотипных переменных, объединенных в единый объект. Для работы с некоторой структурой в программе необходимо: 1. описать тип данных этой структуры; 2. определить переменные этого типа для хранения соответствующих данных в памяти. Рассмотрим пример: сведения о студенте содержат следующие данные: · фамилия - Fam; · имя - Name; · год рождения - Year; · пол - Sex; · средний балл - Grade. Представим все эти данные в виде единой структуры. Введем новый тип данных (назовем его t_ Student) для описания этой структуры:
struct t_Student { char Fam [20], Name [16]; short Year; bool Sex; float Grade; }; Описание структуры начинается ключевым словом struct. Каждая входящая в структуру переменная называется членом (полем, элементом) структуры и описывается типом данных и именем. Поля структуры могут быть любого типа данных. Их количество не лимитировано. Вся эта конструкция является инструкцией языка программирования, поэтому после нее всегда должен ставиться символ;. При описании структуры память для размещения данных не выделяется. Работать с описанной структурой можно только после того, как будет определена переменная (переменные) этого типа данных, только при этом компилятор выделит необходимую память:
t_ Student St1, St2; // Определены две переменные типа t_Student
Определение переменных можно осуществить одновременно с описанием типа данных структуры:
struct t_Student { char Fam [20], Name [16]; short Year; bool Sex; float Grade; } St1, St2;
Все поля структурных переменных располагаются в непрерывной области памяти одно за другим. Общий объем памяти, занимаемый структурой, равен сумме размеров всех полей структуры. Для определения размера структуры следует использовать инструкцию sizeof (): sizeof (t_ Student) или sizeof (St2).
Доступ к полям структур Для того чтобы записать данные в структурную переменную, необходимо каждому полю структуры присвоить определенное значение. Для этого необходимо научиться получать доступ к полям. Для этого используется оператор “точка”. Например:
strcpy (St1.Fam, “Иванов ”); strcpy (St1.Name, “Владимир ”); St1.Year = 1995; St1. Sex = true; // Надо договориться какое значение соответствует значению пола St1. Grade = 4.67; При доступе к определенному полю его следует рассматривать как обычную переменную, тип данных которой соответствует типу этого поля. Поля структур могут участвовать в качестве операндов любых выражений, допускающих использование операндов соответствующего типа данных. Копирование данных из одной структурной переменной в другую осуществляется простой операцией присваивания не зависимо от количества полей и размера структуры (это можно делать только в том случае, когда обе переменные одного и того же типа):
St2 = St1; Теперь переменная St2 содержит те же данные, что и переменная St1. В программировании очень часто используются такие конструкции, как массивы структур. Например, сведения о студентах некоторой учебной группы можно хранить в массиве студентов:
t_ Student Gruppa [25]; Здесь мы определили 25-ти элементный массив, каждый элемент которого предназначен для хранения данных одного студента. Получение доступа к данным некоторого студента из группы осуществляется обычной индексацией переменной массива:
St1 = Gruppa [10]; // Переменная St1 содержит сведения об 11-ом студенте
Доступ к некоторому полю студента внутри массива делается так:
double grade = Gruppa[10].Grade; // Переменная grade содержит среднюю оценку 11-ого студента
Если некоторое поле структуры представляет собой массив (например, поле Fam – это массив символов), доступ к отдельному элементу этого массива можно выполнить так:
St1. Fam[5] = ‘ш’;
Или так:
Gruppa[10]. Fam[5] = ‘ш’;
Поскольку поля структуры могут быть любого типа данных, то они могут в свою очередь быть другой структурой или массивом других структур. Определим группу, как структуру, содержащую три поля – номер группы, количество студентов в группе и массив студентов этой группы.
Определяем новый тип данных и переменные для двух групп:
struct t_Gruppa { short NumGr; // Номер группы short Count; // Количество студентов в группе t_ Student Students[25]; // Массив студентов группы } Gr1372, St1373;
Получим данные о некотором студенте из группы Gr1372:
St1 = Gr1372. Students[10]; // Переменная St1 содержит сведения об 11-ом студенте
А вот его средний балл:
grade = Gr1372. Students[10]. Grade; В структуре в качестве поля нельзя использовать элемент, тип которого совпадает с типом самой структуры (рекурсивное использование структур запрещено). Указатели на структуры Любая структурная переменная занимает в памяти определенное положение, характеризующееся конкретным адресом. Для работы с адресами структурных переменных (как и для простых переменных) можно использовать указатели. Указатели на структурные переменные определяются точно так же, как и для обычных переменных:
t_ Student * p_ Stud; // Переменная p_ Stud указатель на тип данных t_ Student p_ Stud = & St1; // Переменной p_ Stud присвоен адрес переменной St1
Разыменование указателя (обращение к данным по адресу, хранящемуся в указателе) осуществляется обычным образом:
St2 = * p_ Stud; // Данные по адресу p_ Stud скопированы в переменную St2 Через указатели можно работать с отдельными полями структур. Для доступа к полю структуры через указатель используется оператор “стрелка”, а не “точка”:
grade = St1.Grade; // Доступ к полю Grade через обычную структурную переменную с помощью оператора “точка” grade = p_Stud -> Grade; // Доступ к полю Grade через указатель на структурную переменную с помощью оператора “ стрелка” p_ Stud -> Grade = 3.75; // Полю Grade через указатель на структурную переменную присвоено новое значение
|
||||||
Последнее изменение этой страницы: 2021-09-26; просмотров: 53; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.65.65 (0.013 с.) |