C++. Структуры. Часть 2. Выделение памяти для структуры. Вложенные структуры. Массивы native-структур

C++. Структуры. Часть 2. Выделение памяти для структуры. Вложенные структуры. Массивы native-структур

Структуры. Часть 2. Выделение памяти для структуры. Вложенные структуры. Массивы native -структур

Данная тема базируется на темах:

  • Структуры. Часть 1. Общие понятия о структуре. Шаблон структуры. Структурная переменная. Структуры в среде CLR . Объявление и инициализация структурной переменной
  • Массивы. Часть 1. Определение массива. Одномерные массивы. Инициализация массива
  • Массивы. Часть 2. Двумерные массивы. Массивы строк. Многомерные массивы
Содержание
  • 1. Каким образом выделяется память для структурной переменной? Пример применения операции sizeof
  • 2. Какие особенности использования вложенных структур в программах?
  • 3. Пример объявления и использования вложенной native -структуры
  • 4. Пример объявления и использование вложенной ref -структуры
  • 5. Пример объявления и использования вложенной value -структуры
  • 6. Как объявить массив структур ( native )? Пример объявления и использования
  • 7. Пример объявления и использования массива native -структур, который есть отдельным полем структуры (вложенным в структуру)
  • 8. Пример объявления и использования двумерного массива native -структур
  • Связанные темы

Поиск на других ресурсах:

1. Каким образом выделяется память для структурной переменной? Пример применения операции sizeof

Объявление структурной переменной осуществляется в 2 этапа:

  • объявление шаблона структуры как нового типа данных. На этом этапе память не выделяется. Формируется только информация о содержимом структуры;
  • объявление самой переменной. На этом этапе выделяется память для любого поля (переменной), которое описывается в шаблоне структуры.

Пример. Пусть задан шаблон native -структуры, которая описывает книгу в библиотеке.

После такого описания память не выделяется.

Если описать переменную типа Book , тогда для такой переменной память будет выделена.

Размер памяти, которая выделяется для переменной B будет составлять: 70 + 50 + 4 + 4 = 128 байт. Для поля title выделится 70 байт (тип char занимает 1 байт). Для поля author выделится 50 байт. Для поля year (в Win32 ) выделится 4 байта (тип int ). Для поля price выделится 4 байта (тип float ).

В зависимости от разрядности операционной системы и конфигурации оборудования эта цифра может быть другой.

Пример. Определение размера памяти, которая выделяется для структурной переменной.

2. Какие особенности использования вложенных структур в программах?

Шаблон любой структуры может включать в себя другие структуры. Если в структуре описывается другая структурная-переменная, тогда для этой переменной память выделяется согласно правилам выделения памяти для структурной переменной (см. п.1).

3. Пример объявления и использования вложенной native -структуры

Пусть заданы два шаблона структур, которые объявляются в отдельном файле «MyStruct.h» :

– шаблон Point , описывающий точку на координатной плоскости:

– шаблон Triangle , описывающий треугольник на плоскости:

В шаблоне Triangle описывается три вложенных структуры (точки) типа Point .

Демонстрация работы со структурой Triangle .

Для использования метода strcpy() и подключения файла структуры нужно в начале модуля программы вписать:

В native -структуре

  • можно объявлять другую native -структуру;
  • можно объявлять value -структуру;
  • нельзя объявлять ref -структуру, поскольку она есть типом-ссылкой.
4. Пример объявления и использование вложенной ref -структуры

Пусть задан шаблон ref -структуры, которая описывает точку на координатной плоскости

Однако, эта структура может быть вложенной в другой ref -структуре. Пример

В ref -структуре:

  • можно объявлять другую ref -структуру;
  • можно объявлять value -структуру;
  • нельзя объявлять native -структуру. Система выдает сообщение: «Mixed types are not supported» («Смешанные типы не поддерживаются»).
5. Пример объявления и использования вложенной value -структуры

Пусть заданы два шаблона value -структур, которые описывают точку ( Point_value ) и треугольник ( Triangle_value )

В шаблоне value -структуры:

  • можно объявлять другую вложенную value -структуру;
  • нельзя объявлять вложенную ref -структуру
  • нельзя объявлять вложенную native -структуру.
6. Как объявить массив структур ( native )? Пример объявления и использования

Для native -структур объявления массива происходит классическим для C/C++ способом. Пусть задан шаблон структуры Point_native , которая описывает точку на плоскости.

Пример 1. Объявление и использование массива структур как значений.

Пример 2. Объявление и использование массива указателей на native -структуры.

7. Пример объявления и использования массива native -структур, который есть отдельным полем структуры (вложенным в структуру)

Структура может содержать вложенный массив структур.

Пусть задан шаблон native -структуры Point_native , что описывает точку на плоскости

Массив из n точек ( n = 1..10) можно представить в виде такого шаблона:

8. Пример объявления и использования двумерного массива native -структур

Пусть задана native -структура, которая описывает точку на плоскости.

Тогда, работа с двумерным массивом таких структур размером 5*10 будет приблизительно следующей

📎📎📎📎📎📎📎📎📎📎