Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

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 не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...