-
Лабораторная работа № 1-14
Структуры. Создание и вызов функций в C
1. Цель работы
Целью работы является разработка, отладка и выполнение программы на C с использованием структур, а также определение и вызов функций в программах.
2. Состав рабочего места
2.1. Оборудование: IBM-совместимый персональный компьютер (ПК).
2.2. Программное обеспечение: операционная системаWindows, интегрированная оболочкаBorlandC++.
3. Краткие теоретические сведения
3.1. Структуры
Массив позволяет работать с наборами данных, все элементы которых имеют один и тот же тип. Однако во многих задачах приходится иметь дело с наборами данных, состоящих из элементов разного типа. Для работы с такими наборами данных в Cвведены структуры.
Структура– это одна или несколько переменных (возможно различных типов), которые для удобства работы с ними сгруппированы под одним именем. Структуры помогают в организации сложных данных, особенно в больших программах, поскольку позволяют группу связанных между собой переменных рассматривать не как множество отдельных элементов, а как единое целое.
Объявление структуры в Cзадается в одном из следующих двух форматов:
struct имя-типа {список-объявлений} описатель-1, описатель-2...;
struct имя-типа описатель-1, описатель-2...;
где
имя-типав первом формате – необязательный идентификатор, именующий структурный тип, задаваемый списком перечисления, указанном в операторе, а во втором формате – ссылка на структуру тип с именемимя-типа, объявленную в другом месте программы;
список-объявлений– последовательность из одного и более объявлений переменных или битовых полей. Элементы структуры могут иметь базовый тип, либо быть массивом, указателем, объединением или, в свою очередь, структурой. Объявление элементов структуры как битовых полей будет описано при рассмотрении операций над битами.
описатель– либо идентификатор переменной структурного типа, либо указатель на структуру данного типа, либо массив структур данного типа, либо функция, возвращающая структуру данного типа.
Идентификаторы элементов структуры должны различаться между собой, а идентификаторы элементов разных структур могут совпадать.
Объявление даты как структуры будет иметь следующий вид:
struct date
{
int unsigned day; /* День месяца */
char *month; /* Наименование месяца */
int unsigned year; /* Год */
char *week_day; /* День недели */
} current_date;
Здесь объявлен тип структуры date, описывающий компоновку даты и конкретная структура для текущей даты типаdateс именемcurrent_date.
В программе затем можно объявлять и другие структуры типа date, используя второй формат объявления структуры, например, дату дня рождения можно объявить как структуру типаdateследующим образом:
struct date birth_date;
Элементы структуры могут быть проинициализированы, если после описателя переменной задан символ "=" и указан (в фигурных скобках) список начальных значений элементов структуры в порядке их следования в объявлении. Элементы списка отделяются друг от друга запятыми.
Элемент структуры не может быть структурой того же типа, в которой он содержится, однако он может быть объявлен как указатель на тип структуры, в которую он входит. Это позволяет создавать связанные списки структур.
Можно создавать вложенные структуры, т.е. структуры, элементами которых могут быть другие структуры.
Можно также объявлять указатели на структуры, например:
Доступ к отдельному элементу структуры осуществляется посредством конструкции вида:
имя-структуры.элемент-структуры
Для доступа к данным структуры можно также использовать указатели. Поскольку указатели на структуры используются довольно часто, для доступа к ее элементам вместо приведенного выше выражения можно использовать следующую форму записи:
указатель-на-структуру -> элемент-структуры
Единственно возможные операции над структурами – копирование, присваивание (для структур одного типа), взятие адреса и осуществление доступа к ее членам. Можно также передавать структуры функциям в качестве аргументов и возвращать их от функций в качестве результата. Структуры нельзя сравнивать.
Структуры одного типа можно объединять в массивы.