Слайд 2Понятие структуры
Помимо стандартных типов, программист может создавать свои собственные составные типы данных
- структуры.
Структура — это множество, состоящее из одного или более объектов, возможно имеющих различные типы, объединённых под одним именем. Конструкция struct — один из основных строительных блоков данных в языке. Он предоставляет удобный способ объединения различных элементов, связанных между собой логической связью. Рассмотрим особенности работы со структурами на примере:
Слайд 3Пример работы со структурами
https://git.io/vbr8Q
Слайд 4Особенности структур
Описание структуры начинается со служебного слова struct, за которым может следовать
необязательное имя, называемое именем типа структуры. Это имя типа структуры используется в дальнейшем для создания конкретного объекта
За именем типа структуры идёт заключенный в фигурные скобки список элементов структуры, с описанием типа каждого элемента (элементом структуры может быть переменная, массив или структура). Элементы структуры отделяются друг от друга точкой с запятой
Слайд 5Особенности структур
За правой фигурной скобкой, закрывающей список элементов, может следовать список
объектов. Например, оператор struct date {...} x,y,z; определяет переменные x,y,z в качестве структур описанного типа и приводит к выделению памяти
Описание структуры, за которым не следует список объектов, не приводит к выделению памяти - только определяет форму структуры. Если описание снабжено именем типа, то это имя типа может быть использовано позднее при определении объектов структур
Слайд 6Особенности структур
Структуру можно инициализировать, поместив вслед за её определением список инициализаторов
для её компонентов, заключенный в фигурные скобки. В программе таким образом инициализирована структура:
date my_birthday = {20,7,1981,"July"};
Обращение к определённому члену структуры производится с помощью конструкции вида:
<имя структуры>.<имя элемента>
Структуры могут вкладываться одна в другую, но самовложение структур запрещено!
Слайд 7Пример вложенности
struct date {
int day; // День
char month[10]; // Месяц
int year; //
Год
};
struct person {
char name[50]; // Имя, фамилия, отчество
char address[10]; // Домашний адрес
int salary; // Зарплата
date birthdate; // Дата рождения.
date hiredate; // Дата поступления на работу
};
Слайд 9Использование вложенности
Если определить struct person Nick;
то Nick.birthdate.month будет обозначать месяц рождения. Операция
доступа к элементу структуры «.» вычисляется слева направо.
Слайд 10Действия над структурами
Доступ к элементу структуры с помощью операции «.»
Доступ к элементу
структуры по указателю с помощью операции «->»
Определение адреса структуры с помощью операции «&»
Присваивание структуры как единого целого
Передача структуры в качестве параметра функции и возвращение структуры в результате работы функции
Слайд 11Операция sizeof
В языке С существует специальная унарная операция sizeof, которая возвращает размер
своего операнда в байтах. Операндом операции sizeof может быть любое выражение:
sizeof(Выражение);
Результат операции sizeof имеет тип int.
Слайд 12Размер объектов структур
Может показаться, что размер структуры равен сумме размеров её компонентов.
Это не так. Вследствие выравнивания объектов разной длины в структуре появляются безымянные «дыры». Так, например, если переменная типа char занимает один байт, а int — четыре байта, то для
struct Test {
char c;
int i;
};
может потребоваться 8 байт, а не 5.
Правильное значение возвращает операция sizeof.