
- •Лекция 18 Структуры. Объединения. Поля битов в структурах
- •Структура как пользовательский тип и совокупность данных Определение шаблона структуры и структурной переменной
- •Расположение структурных переменных в памяти
- •Инициализация структурных переменных
- •Вложенные структуры
- •Операции над структурными переменными
- •Массив структур
- •Структура в качестве аргумента функции
- •Примеры работы со структурами
- •Объединение как пользовательский тип и совокупность данных Определение объединения и переменной объединяющего типа
- •Примеры использования объединений Получение внутреннего представления вещественного числа
- •Использование перечислимого типа для обращения к полям объединения
- •Битовые поля структур и объединений Определение битовых полей
- •Примеры использования битовых полей Вывод значений битовых полей
- •Формирование кода символа с помощью битовых полей объединения
- •Формирование байта и вывод на экран его двоичного представления
Массив структур
Определим шаблон структуры data, содержащий информацию о дне рождения (год, месяц, день), и структурные переменные masha_data и sasha_data с информацией о днях рождения Маши и Саши:
struct data
{
int year; //год
unsigned mes; //месяц
unsigned day; //день
};
data masha_data, sasha_data;
Тогда:
masha_data.day //доступ к полю «день рождения» Маши
sasha_data.year //доступ к полю «год рождения» Саши
masha_data (вся информация о дате рождения Маши),
sasha_data (вся информация о дате рождения Саши).
Для данного структурного типа опишем массив структур person_data:
data person_data [20];
Тогда:
person_data – информация о датах рождения всей группы (массива людей из двадцати человек);
person_data[i] – информация о дате рождения (i+1) – го члена группы (i – ый элемент массива);
person_data[i]. mes – месяц рождения (i+1) – го члена группы;
Определим структурный тип (шаблон структуры) mash с информацией о владельце автомобиля: номер, марка автомобиля, фамилия и адрес владельца.
struct Auto
{int nomer ; //номер автомобиля
char marka[20]; //марка автомобиля
char fio[40]; //фамилия владельца
char adres[60] //адрес владельца
};
Auto mers, volvo, alfa_r [5], *mazda, person_list [20]; //определение структурных переменных
mers.marka – доступ к полю «марка» автомобиля mers
mers – вся информация о владельце автомобиля mers
volvo.fio[0] – первая буква фамилии владельца автомобиля volvo
alfa_r [1].adres[0] – первый символ адреса второго элемента массива владельцев alfa_r
person_list – информация о всех владельцах автомобилей (массив из двадцати наборов данных);
person_list[i] – информация о владельце (i+1) –го автомобиля (i –ый элемент в наборе данных);
person_list[i].fio – фамилия владельца (i+1) –го автомобиля;
person_list[i].fio[j] – j-ая буква в фамилии владельца (i+1) –го автомобиля
Расположение массива структур в памяти:
person_list |
|||||
1-ый владелец: person_ list [0] |
2-ой владелец: person_list [1] |
… |
i-ый владелец: person_list [i-1] |
... |
20-ый владелец: person_list [19] |
nomer(4 байта) marka(20 байт) fio(40 байт) adres(60 байт)
|
nomer marka Adres Adre s adres
|
… |
nomer marka fio О
a
|
… |
ОООООООО ОООООООО ОOОООООО ОООООООО ОООООООО |
p
erson_list
[1]. fio person_list [i-1].fio[j]
Массив структурных переменных можно описать и следующим образом:
struct {char name[20];
char title[44];
int year;
float price;
} books[25];
Тогда к полю year в i-ом элементе массива структур books можно обратиться следующим образом:
books[i].year=2007;
(*(books+i)).year=2007;
(books+i)->year=2007;