Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 117; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.196 (0.006 с.) |