Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


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




Лекция 18

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

Структура как пользовательский тип и совокупность данных. 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;

};

//2

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

{ int x, y;

unsigned color;

};

//3

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

{

char name [20];

chat 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;

};

//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]

 





Поделиться с друзьями:


Дата добавления: 2016-10-06; Мы поможем в написании ваших работ!; просмотров: 454 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Вы никогда не пересечете океан, если не наберетесь мужества потерять берег из виду. © Христофор Колумб
==> читать все изречения...

2279 - | 2102 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.007 с.