, где Ярлык, как обычно, идентификатор имени структуры;
Тип - тип данных, который имеют элементы массива;
Имя_члена - общее имя элементов массива;
N - размер массива;
char Имя_строки[M] - либо символьный массив длиной M, либо строка, если в этом массиве существует символ '\0'.
После создания объекта (объявления структурной переменной) обращение к элементам массива через имя объекта производится так же, как к простым элементам объекта с добавлением в квадратных скобках индекса элемента массива:
┌───────────────────────┐
│ Объект.Имя_члена[i] │
└───────────────────────┘
Обращение к члену объекта через указатель выполняется так:
┌─────────────────────────────────┐
│ Имя_Указателя -> Имя_члена[i] │
└─────────────────────────────────┘
, где Имя_Указателя - идентификатор имени указателя того же типа, что и объект.
Имя_члена[i] - имя члена объекта с индексом.
* * *
┌───────────────────────┐ t0000129
│ Вложенные структуры │
└───────────────────────┘
После определения структуры к ней следует относиться просто как к новому типу данных. Поэтому, при объявлении в составе структуры переменных, этим переменным можно присваивать тип какой-либо ранее определённой структры.
┌──────────────────────────────────────────────┐
Структура, являющаяся членом другой структуры - ВЛОЖЕННАЯ структура. └──────────────────────────────────────────────┘
Общий вид для несильно вложенных сруктур следующий:
┌──────────────────────────────────────────────┐
│ struct Ярлык_1 { // Определение первой структуры.
│ Тип Имя_П_1;
│ };
│ struct Ярлык_2 { // Определение первой структуры.
│ Тип Имя_П_2;
│ Ярлык_1 Объект_Вл; // Вложение структуры.
│ };
└──────────────────────────────────────────────┘
где Ярлыки - пользовательские типы данных;
Тип - типы данных;
Объект_Вл - объект типа Ярлык_1 - структурная переменная, являющаяся членом структуры Ярлык_2.
Обращение к членам вложенных объектов выполняется обычным образом :
- по имени через точку;
- через указатель с использованием ( -> ).
По имени:
┌───────────────────────────────┐
│ Ярлык_2 . Ярлык_1 . Имя_П_1 │
└───────────────────────────────┘
Ещё раз хочу обратить ваше внимание на возможность применения в коде пробелов и Enter с точки зрения повышения читаемости кода.
Так, например, последнее обращение к элементу члена внутреннего объекта
q.Z.c[i], представленное через указатель на внешний объект, показано в коде двояко:
- в обычном виде - t->Z.c[i] ,
- в растянутом виде (вдруг так захочется): t -> Z . c [ i ] .
Эти написания абсолютно равноценны, и наличие пробелов никак не сказывается на логике работы кода.
Обсудим вопрос глубины вложения структур:
┌──────────────────────────────────────────────┐
│ Глубина вложения структур - не ограничена. │
└──────────────────────────────────────────────┘
При нескольких вложениях структур обращения производятся аналогично обращениям при двух вложенных структурах.
Каждая структура может содержать в себе переменные с одинаковым именем, например, K. Но это разные переменные:
┌─────────────┬────────────────────────────────┐
│ g.K
│ g.F.K Это различные переменные
│ g.F.E.K
│ g.F.E.D.K
└──────────────┴───────────────────────────────┘
Обращение к массиву самой внутренней структуры:
- через имя - g.F.E.D.A[i]
- через указатель - p->F.E.D.A[i+1]
- через указатель на внутренний объект - t->A[i].
* * *
┌─────────────────────────┐ t0000131
│ Присваивание структур │
└─────────────────────────┘
Между однотипными объектами возможно выполнения операции присваивания:
┌──────────────────────────────────────────────┐
│ Если объявлено: Ярлык Объект_1, Объект_2;
│
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.