Лекция 10 Структуры
Классификация типов данных Простые Целые, вещественные, void, перечисления Являются атомарными не состоят из других типов Адресные Указатели, массивы, ссылки Порождаются другими типами Составные Структуры, объединения Состоят из данных других типов
Задача составных типов Представление свойств сущности Пример: Животное Кличка Тип Порода Группировка различных данных в одной переменной Пример: Точка на плоскости: координата по x координата по y цвет
Структуры vs массивы Массив Последовательность однотипных данных Структура Последовательность разнотипных данных
Задание структуры Объявление структуры Определение структуры Безымянные структуры struct Point ; struct Point { int x ; int y ; }; struct Point { int x ; int y ; }; struct { int head ; int tail ; }; struct { int head ; int tail ; };
Правила определения структур Общепринято задание вне функций Применение локальных структур очень ограниченно и никогда не используется. Задают тип, а не переменную Чтобы обратиться к данным, необходимо иметь переменную данного типа Данные хранятся в порядке указания Порядок объявления данных определяет порядок создания и размещения данных в памяти
Использование структур (POD) Создание переменной Инициализация Обращение к полям Point p1 ; Point p2 ; Point p1 ; Point p2 ; p1.x = 4 ; p2.x = 3 ; p2.y = p1.y = 8 ; p1 = p2 ; p1.x = 4 ; p2.x = 3 ; p2.y = p1.y = 8 ; p1 = p2 ; Point p3 = { 3, 8 }; Point p4 = { 7, 1 }; Point p3 = { 3, 8 }; Point p4 = { 7, 1 };
Пример struct Point { int x ; int y ; }; int crossProduct ( Point const & a, Point const & b ) { return a.x * b.x + a.y * b.y ; } void main () { Point pts[3]={{0,0},{1,1},{2,2}}; bool acute = true ; for ( int i = 0 ; i < 3; ++i ) if ( crossProduct( pts[i], pts[(i+1)%3] ) ) acute = false ; } struct Point { int x ; int y ; }; int crossProduct ( Point const & a, Point const & b ) { return a.x * b.x + a.y * b.y ; } void main () { Point pts[3]={{0,0},{1,1},{2,2}}; bool acute = true ; for ( int i = 0 ; i < 3; ++i ) if ( crossProduct( pts[i], pts[(i+1)%3] ) ) acute = false ; }