Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
I. Теоретический раздел работы
Кроме известных типов данных языка С позволяется создавать ещё несколько типов данных: - структуры; - объединения; - перечисляемый тип (см. лаб. раб. № 3); - поля битов; - использование оператора typedef с целью создания нового имени для уже существующих типов.
Структура Часто в программировании необходимо объединить разнородные, но логически связанные данные. Например, наш домашний адрес состоит из целых чисел: номеров квартиры, дома, почтового индекса, а также из названий: улицы, города, страны. В языке С для представления разнородных данных служит структурированный тип, который так и называется структурой или комбинированным типом данных. Структуры, как и массивы, используются для описания упорядоченной совокупности величин. Во многом они схожи, но в отличие от массива, где все компоненты должны быть одного и того же типа, структуры обычно содержат компоненты различных типов. В случае массива переменная с индексами однозначно определяет требуемый элемент. Структура объединяет несколько переменных, возможно разного типа. Переменные, которые объединены структурой, называются членами, элементами или полями структуры. Пример определения структуры: struct student { char name[30]; int kurs; char group[3]; int stp; } Объявление структуры является оператором, и поэтому в конце должна стоять точка с запятой. При этом пока никакая переменная не объявлена. Выделения памяти под переменную не произошло. Под именем student задан частный вид структуры; говорят, что задан шаблон структуры и определен новый тип struct student. Для того чтобы объявить конкретные переменные типа struct student, можно написать struct sudent studl, stud2; Теперь объявлены две переменные - studl и stud2. Компилятор автоматически выделит под них место в памяти компьютера. Под каждую из переменных типа структуры выделяется непрерывный участок памяти. Задание шаблона структуры и объявление переменных может производиться и в одном операторе: struct student { char name[30]; char kurs; char group[3]; int stip; } stud1, stud2; Здесь одновременно задается структура с именем student и объявляются переменные stud1 и stud2. Доступ к конкретному элементу структуры осуществляется с помощью операции "точка". Например, stud1.name="Иванов М. С."; Структуры, как и переменные другого типа, могут объединяться в массивы структур. Чтобы объявить массив структур, надо сначала задать шаблон структуры (у нас уже есть шаблон student), а затем объявить массив: struct student studlkurs[200]; Этот оператор создаст в памяти 200 переменных типа структуры с шаблоном студент и именами studlkurs[0], studlkurs[l] и т. д. Для доступа к полю kurs 25-го элемента массива используем studlkurs[24].kurs Если объявлены две переменные типа структуры с одним шаблоном, можно сделать присваивание studl=stud2; при этом произойдет побитовое копирование каждого поля одной переменной в соответствующее поле другой структуры. В то же время нельзя использовать операцию присваивания переменных типа структуры, шаблоны которых описаны под разными именами, пусть даже совсем идентично: Переменная типа структуры может быть глобальной, локальной переменной и формальным параметром. Можно, естественно, использовать структуру или ее элемент структуры как любую другую переменную в качестве параметра функции. Чтобы завершить разговор о структурах, надо добавить, что в качестве элементов структуры можно использовать массивы, структуры и массивы структур. Пусть объявления переменных имеют вид struct addr { char city[30]; char street[30]; int house; } struct fulladdr { struct addr addres; int room; char name[30]; } f,g; Здесь addr - шаблон структуры, определенный перед объявлением структуры fulladdr и объявлением переменной f типа структуры fulladdr. Для присвоения значения элементу house структуры addres переменной f используем a.addres.house=101; Объединение В языке Си определен еще один тип для размещения в памяти несколько переменных разного типа. Это объединение. Объявляется объединение так же, как и структура, например: union u { int i; char ch; long int li: }; Это объявление не задает какую-либо переменную. Оно задает шаблон объединения. Можно объявить переменную union u alfa. beta; Можно было объявить переменные одновременно с заданием шаблона. В отличие от структуры для переменной типа union места в памяти выделяется ровно столько, сколько надо элементу объединения, имеющему наибольший размер в байтах. В приведенном выше примере под переменную alfa будет выделено 4 байта памяти. В самом деле, элемент i требует 2 байта, элемент с - 1 байт, и элемент 1i - 4 байта. Остальные переменные будут располагаться в том же месте памяти. Синтаксис использования элементов объединения такой же, как и для структуры: u ch = «5»; Переименование типов Язык Си позволяет, кроме того, дать новое название уже существующим типам данных. Для этого используется ключевое слово typedef. При этом не создается новый тип данных. Например: typdef char SYMBOL; typdef unsigned UNSIGN; typdef float real; Достаточно часто используется оператор typedef с применением структур: typdef struct st_tag{ char name[30]: int kurs; char group|3|; int slip; } STUDENT; Теперь для определения переменной можно использовать: struct st_tag avar или STUDENT avar. |
||
Последнее изменение этой страницы: 2018-05-10; просмотров: 226. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |