4.1. Структуры - StriderAJR/StudentCpp GitHub Wiki
Структура - это пользовательский тип данных. Суть структуры - несколько переменных, объединенных под одним именем. Проще говоря, структура - это коробка с именем, внутри которой лежат любые переменные.
Однажды программисты столкнулись с проблемой: для описания одной какой-то вещи в алгоритме нужно использовать не одну, а несколько переменных.
Например, в геометрии это точка.
У точки на плоскости 2 координаты, в пространстве вообще три. Т.е. для каждой такой точки нужно создавать 2 переменных:
struct Point
{
int x, y;
};Не забывайте ; после описания структуры!
Иначе компилятор не поймет, что описание структуры закончилось и у вас посыпятся ошибки компилятора о неправильной вложенности.
Т.е. создавая какую-то структуру, (например, мы создали структуру Point - точка), мы создали свой собственный тип данных, такой же как int, char, double и т.д.
Отличие от стандартных типов данных (например, типа int) только в том, что int - простой тип данных и переменная такого типа хранит только одно целочисленное число, а переменная типа данных точка будет хранить сразу 2 переменных типа данных int.
В памяти структура хранится одним большим блоком, как сумма блоков каждой отдельной переменной внутри структуры.
Под каждую переменную типа данных Point будет выделяться 8 байт памяти: 4 байта для переменной x + 4 байта для переменной y. И в памяти лежать эти данные будут друг за другом подряд.
Структура - это тип данных! Значит, можно создавать переменные такого типа.
Создадим еще одну структуру, треугольник:
Треугольник характеризуется 3 вершинами.
struct Triangle
{
Point v1, v2, v3;
};Таким образом у треугольника будет 3 вершины, каждая из которых - это точка с 2-мя координатами x и y.
Вся логика должна быть понятна, проста и легко читаема постороннему человек, который в первый раз открыл ваш код. Иначе вы что-то делаете не так.
Корень проблемы данной ситуации, что для описании одного понятия "точка" требуется 2 переменных, а для понятия "треугольник" - 3 точки.
Поняв корень проблемы, был создан тип данных структура.
Структура - это несколько переменных, объединенных под одним именем.
Ну а теперь рассмотрим как же работать со структурами:
void main()
{
Point p1;
Point* p2 = new Point;
p1.x = 1;
p1.y = 2;
p2->x = 3;
(*p2).y = 4; // Это аналогичная запись
cout << p2->x << endl; // 3
cout << (*p2).x << endl; // 3
Triangle t;
t.v1.x = 2;
t.v1.y = 3;
t.v2.x = 1;
t.v2.y = 10;
t.v3.x = 4;
t.v3.y = -2;
}
Статическое создание переменной типа структура:
Point p1;Динамическое создание переменной типа структура:
Point* p2 = new Point;Оператор . - получение доступа к внутреннему содержимому переменной составного типы.
Оператор -> - то же, что и ., но применяется, если переменная состоавного типа - это указатель.
Ещё оператор -> - более компактная запись 2-х операций:
1. разыменовывания указателя
2. получения доступа до составного типа
Следующие 2 строчки делают одно и то же, но с помощью разных операторов . и ->
cout << p2->x << endl; // 3
cout << (*p2).x << endl; // 3Создадим треугольник:
Triangle t;Заполним значения вершин:
Внутри переменной t есть переменная v1, а внутри v1 есть переменные x и y. Это как коробка внутри коробки. Есть большая коробка t - треугольник, внутри которой есть 3 другие коробки v1, v2, v3, внутри каждой из которых лежит 2 целочисленные переменные x и y.
