Типы данных. Знакомствоу с простейшими видами пользовательских типов данных. Объединение разнотипных данных под одним именем, страница 5

, где Ярлык, как обычно, идентификатор имени структуры;

Тип                - тип данных, который имеют элементы массива;

Имя_члена          - общее имя элементов массива;

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; 

│