Определение шаблона структуры и структурной переменной

Структура как пользовательский тип и совокупность данных

Структуры. Объединения. Поля битов в структурах

Лекция 18

ЛИТЕРАТУРА

ЛИТЕРАТУРА

1. Долгих, В.Т. Общая патофизиология: учебное пособие / В.Т. Долгих. – Ростов-на-Дону: Феникс: Омск. Омская государственная академия, 2007. – 160 с.

2. Эвелин Пирс. Анатомия и физиология для медсестер / Э. Пирс. – Минск: БелАДИ, 1996. – 406 с.

3. Сагалович, Б.М. Лекции по общей патологии / Б.М. Сагалович. – М.: Просвещение, 1970. – 351 с.

4. Сапин, М.Р. Анатомия человека в 2-ух кн. / М.Р. Сапин, Г.Л. Билич. – М.: Высшая школа, 1996. – 1 кн. – 463 с., 2 кн. – 432 с.

5. Патологическая анатомия и физиология: учебно-методическое пособие / М.К. Недьведь, Е.Д. Черствой, А.А. Кривчик, Е.В. Леонова. – Минск: Вышэйшая школа, 1997. – 208 с.

1. Долгих, В.Т. Общая патофизиология: учебное пособие / В.Т. Долгих. – Ростов-на-Дону: Феникс: Омск. Омская государственная академия, 2007. – 160 с.

2. Эвелин Пирс. Анатомия и физиология для медсестер / Э. Пирс. – Минск: БелАДИ, 1996. – 406 с.

3. Сагалович, Б.М. Лекции по общей патологии / Б.М. Сагалович. – М.: Просвещение, 1970. – 351 с.

4. Сапин, М.Р. Анатомия человека в 2-ух кн. / М.Р. Сапин, Г.Л. Билич. – М.: Высшая школа, 1996. – 1 кн. – 463 с., 2 кн. – 432 с.

5. Патологическая анатомия и физиология: учебно-методическое пособие / М.К. Недьведь, Е.Д. Черствой, А.А. Кривчик, Е.В. Леонова. – Минск: Вышэйшая школа, 1997. – 208 с.

Структура как пользовательский тип и совокупность данных. 1

Определение шаблона структуры и структурной переменной. 1

Расположение структурных переменных в памяти. 5

Инициализация структурных переменных. 7

Вложенные структуры.. 7

Операции над структурными переменными. 8

Массив структур. 10

Структура в качестве аргумента функции. 11

Примеры работы со структурами. 12

Объединение как пользовательский тип и совокупность данных. 15

Определение объединения и переменной объединяющего типа. 15

Примеры использования объединений. 17

Получение внутреннего представления вещественного числа. 17

Использование перечисляемого типа для обращения к полям объединения. 17

Битовые поля структур и объединений. 19

Определение битовых полей. 19

Примеры использования битовых полей. 20

Вывод значений битовых полей. 20

Формирование кода символа с помощью битовых полей объединения. 21

Формирование байта и вывод на экран его двоичного представления. 22

Структура (структурный тип, шаблон структуры) – это тип, определяемый пользователем с использованием ключевого слова struct для объединения в единое целое, имеющее имя, множества поименованных элементов (полей данных), в общем случае, разных типов.

Определение структуры ( структурного типа, шаблона структуры) задает внутреннюю организацию структурных переменных после их определения и никак не связано с резервированием памяти компилятором, не создает никаких переменных. Структурный тип только задает правила формирования структурной переменной, используемые компилятором при последующем определении структурной переменной для выделения ей места в памяти и организации доступа к ее полям. Структурный тип имеет уникальное имя в пределах области определения. Имя структурного типа используется при определении структурных переменных аналогично встроенным типам.

 
 


struct date{ int day; int month; int year; char mon_name[10]; }; имя (тег) структуры элементы структуры (поля, члены-данные)
ключевое слово определение структуры (структурного типа, шаблона структуры)

Синтаксис определения структуры (структурного типа, шаблона структуры):

struct pattern_name { type1 field_name1;
type2 field_name2;
…..
typeN field_nameN;

};

или, в случае полей одного типа:

struct pattern_name { type1 field_name1, field_name2;
…..
typeK field_nameN;

};

где:

  • pattern_name – имя шаблона, удовлетворяющее правилам задания идентификаторов языка;
  • type1, type2, … typeN – любые типы;
  • field_name1, field_name2, …, field_nameN – имена полей, удовлетворяющие правилам задания идентификаторов языка.

Элементом структуры в С++ может быть и функция.

Примеры определений структурного типа:

//1

struct PointRecType // структурный тип «точка»

{ int x, y;

};

!!! Для определения точки можно использовать предопределенную в заголовочном файле windows.h структуру POINT, соответствующую структуре PointRecType.

//2

struct ColorPointRecType // структурный тип «цветная точка»

{ int x, y;

unsigned color;

};

//3

struct Book // структурный тип «книга»

{

char name [20];

char title[44];

int year;

float price;

};

//4

struct Auto // структурный тип «автомобиль»

{

char fio[40]; //ФИО владельца

char adres[60]; //адрес владельца

int nomer; //номер авто

char marka[20]; //марка авто

};

//5

struct Student // структурный тип «студент»

{

unsigned short gruppa;

char fio[20];

unsigned short ocenki[KOL_OC]; //массив оценок на экзамене

};

//6

struct Rectangle // структурный тип «прямоугольник»

{

int left; //пара координат верхней левой точки

int top;

int right; //пара координат нижней правой точки

int bottom;

};

!!! Для определения прямоугольных областей можно использовать предопределенную в заголовочном файле windows.h структуру RECT, соответствующую приведенной структуре Rectangle:

//7

struct Box // структурный тип «ящик»

{

double length; //длина

double width; //ширина

double heigth; //высота

};

Определение структурной переменной состоит из двух шагов:

· определение структурного типа (шаблона структуры, структуры);

· собственно определение структурной переменной

Определение структурных переменных s1 и s2 для приведенной выше структуры Student выглядит следующим образом:

Student s 1, s2; //ключевое слово struct опускается

Синтаксис С++ разрешает совмещать определение структурного типа и определение структурных переменных. Например:

struct Book { char name[20]; определение структурного типа

char title[44];

int year;

float price; определение структурных переменных

} first_book, child_book, dog_book [4], *ptr_book;

Определение структурного типа может быть анонимным. В этом случае сразу следует определять структурные переменные. Например:

struct { // анонимный структурный тип

int pole1;

double pole2;

char *pole3;

} a, b, * pb=&b, * pc, & refa=a, & refb(b); // определение структурных переменных

Как мы видим, значением указателя на структуру может быть адрес структуры того же типа, т.е. адрес байта, начиная с которого структура размещается в памяти. Структурный тип задает ее размеры и тем самым определяет, на какую величину (на сколько байтов) изменится значение указателя на структуру, если к нему прибавить (или вычесть) 1.

Структурный тип может быть операндом операции new:

ptr_book = new Book; //выделяется память для структуры типа Book и
//возвращается указатель на выделенную память.

Для структур могут быть определены и ссылки. Выше в примере показаны разные способы инициализации ссылок refa и refb.

Доступ к полям структурной переменной возможен в виде:

имя_структуры. имя_элемента_структуры
//. – есть операция доступа к элементу (члену) структуры

имя_ссылки_на_структуру. имя_элемента_структуры

(*имя_указателя_на_структуру). имя_элемента_структуры

В последнем случае скобки обязательны, так как операция разыменования (*) должна относится только к указателю, а не к элементу структуры.

Для доступа к полям структурной переменной через указатель:
(*
имя_указателя_на_структуру ). имя_элемента_структуры

используется также операция ->:

имя_указателя_на_структуру -> имя_элемента_структуры

// -> – есть операция непрямого доступа к элементу (члену) структуры

В случае шаблона структуры:

struct date{

int day;

int mes;

int year;

char mon_name[10];

} x, y, *ptr_date= &x;

эквивалентны записи:

(*ptr_date).year и ptr_date->year

(*ptr_date).mon_name[0] и ptr_date->mon_name[0]


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: