Similar presentations:
Описание структуры это, фактически, описание нового типа данных: составного пользовательского типа данных
1.
Описание структуры это, фактически, описание нового типаданных: составного пользовательского типа данных.
Имя структуры в программе используется для объявления
переменных созданного пользователем типа данных.
Переменные, входящие в состав структуры называются
полями структуры.
Ни одно поле структуры не может получить начальное
значение в определении структуры.
Описание начинается с ключевого слова struct, после
которого следует имя структуры и тело структуры,
заключенное в фигурные скобки. После тела структуры
обязательно ставится точка с запятой.
Доступ к полям структуры осуществляется с помощью
операции селектор члена. Эта операция используется в 2-х
вариантах: . и ->
/*Точка используется для доступа к полям структуры через
объект (переменную пользовательского типа данных), стрелка
– для доступа через указатели. */
2.
• Структура – это множество поименованныхэлементов в общем случае разных типов.
• Объявление типа struct имеет вид:
struct имя_типа {описание элементов};
• Элементы структуры называются полями,
могут иметь любой тип, в том числе быть
указателями на тип самой структуры.
struct book
{
char title[81];
int year;
int page;
float price;
};
3. Поля структуры
• Имена полей в структуре должны различаться.• Имена элементов разных структур могут
совпадать.
• Элементом структуры может быть другая
структура.
Опишем стр-ры:
struct pets { char name[10];
//домашние
int age;
//животные
};
struct boy { char name[10];
int age;
struct pets pet; //вложенная стр-ра
};
4. Объявление переменных
Оператор описания переменной:struct book library;
создает объект типа struct book, под
который выделяется 92 байт памяти в
соответствии со структурным шаблоном:
sizeof (library)==92
Можно совместить описание типа и
переменной: struct book
{ char title[80];
int year;
int page;
float price;
} library;
5.
Структурную переменную можно инициализировать воператоре описания подобно массиву:
struct book library= { “Язык С++”,
2010,
900,
1000
};
6.
• Доступ к элементам структуры осуществляется спомощью операции точка
Память под переменную library типа struct book:
library.title
library. author
library. year
library.price
library.page
library.author=”Страуструп”; // явная инициализация
gets (library.author);
//ввод значения
7. Массивы структур
• Описание массива структур аналогично описаниюлюбого другого массива:
struct book catalog[10];
• Каждый элемент массива catalog представляет собой
структуру типа book.
• Для доступа к элементу массива используется
индекс, который присоединяется к имени массива:
catalog[2].title
catalog[4].price
catalog[2].title[5]
//6 эл-т символьного массива
//в 3-й структуре
8. Вложенные структуры
• Элементом структуры может быть другая структура.struct myfile
{ char name[10];
char ftype[4];
int ver;
};
struct dir
{ struct myfile f;
int
size;
} my_f [100];
my_f [0].size
//элемент size 1-й структуры массива
my_f [2].f.ver
//элемент ver вложенной структуры f
//в 3-й структуре массива my_f
9. Указатели на структуры
• Объявим указатель на структуру:struct dir *pst;
Указатель *pst можно использовать для ссылок на
любые структуры типа dir:
pst = &my_f [0];
• Динамическое выделение памяти под структуру
pst = new dir;
• Динамическое выделение памяти под массив
структур
pst = new dir[size];
10.
Создадим динамическую структуру:pst = new dir;
• Доступ к полям структуры через указатель
осуществляется с помощью операции косвенного
доступа
*pst
*
pst
pst->(f.name)
(*pst).(f.name)
pst->(f.ftyp) pst->(f.ver) pst->size
(*pst).(f.ftyp) (*pst).(f.ver) (*pst).size
•Присвоим значения полям динамической структуры:
Массивы
scanf(" %d ", &pst->size);
символов
scanf(“%s %s %d",
pst->(f.name), pst->(f.ftyp), &pst->(f.ver));
Число
11. Битовые поля
• Битовые поля применяются для экономногохранения данных малого диапазона, а также для
работы с данными, в которых отдельные биты
имеют самостоятельное значение.
• Битовое поле может быть объявлено только как
элемент структуры.
• Цепочка битов не должна превышать машинного
слова.
/*контрольный байт*/
struct bit_area
{ unsigned char er : 1;
unsigned char rd : 1;
unsigned char dat : 6;
} cntrl_byte;
//бит ошибки
//бит готовности
//поле данных
12.
13.
14.
15. Объединения
• Объявлениеобъединения
синтаксически
совпадает с объявлением структуры, но
начинается с ключевого слова union.
• Поля объединения хранятся в одной области
памяти и имеют один и тот же начальный
адрес.
• Размер
объединения
определяется
максимальным размером его элементов.
• Объединения экономят память и используются,
если в каждый момент времени используется
только одно поле.
16. Объединения
union small {int x;
char s[10];
float y;
} val;
• Под объект val память выделяется в
соответствии с размером максимального поля 10 байт.
17. Перечислимые типы данных
• Перечислимыйтип
(перечисление)
–
определение целочисленных констант, для
каждой из которых вводятся имя и значение.
• Объявление:
enum
имя_типа
{список
перечисления}
идентификатор;
• Пример:
enum progr {C, Pascal, Foxpro, Modula 2, Basic,
Fortran} lang;
lang = C;
if (lang == C) printf(“I know language С++\n”);
18.
•Пример явной инициализации констант:enum mas {elem1 = -1, elem2, elem3 = 5};
•Если явной инициализации нет, нумерация элементов
перечисления начинается с нуля
•Элементам перечисления могут быть присвоены
одинаковые значения:
enum mas {elem1 = 2, elem2, elem3 = 2, elem4};