Поля структуры
Объявление переменных
Массивы структур
Вложенные структуры
Указатели на структуры
Битовые поля
Объединения
Объединения
Перечислимые типы данных
477.00K
Категория: ПрограммированиеПрограммирование

Описание структуры это, фактически, описание нового типа данных: составного пользовательского типа данных

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};
English     Русский Правила