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 -структуру, поскольку она есть типом-ссылкой.
Пусть задан шаблон ref -структуры, которая описывает точку на координатной плоскости
Однако, эта структура может быть вложенной в другой ref -структуре. Пример
В ref -структуре:
- можно объявлять другую ref -структуру;
- можно объявлять value -структуру;
- нельзя объявлять native -структуру. Система выдает сообщение: «Mixed types are not supported» («Смешанные типы не поддерживаются»).
Пусть заданы два шаблона value -структур, которые описывают точку ( Point_value ) и треугольник ( Triangle_value )
В шаблоне value -структуры:
- можно объявлять другую вложенную value -структуру;
- нельзя объявлять вложенную ref -структуру
- нельзя объявлять вложенную native -структуру.
Для native -структур объявления массива происходит классическим для C/C++ способом. Пусть задан шаблон структуры Point_native , которая описывает точку на плоскости.
Пример 1. Объявление и использование массива структур как значений.
Пример 2. Объявление и использование массива указателей на native -структуры.
7. Пример объявления и использования массива native -структур, который есть отдельным полем структуры (вложенным в структуру)Структура может содержать вложенный массив структур.
Пусть задан шаблон native -структуры Point_native , что описывает точку на плоскости
Массив из n точек ( n = 1..10) можно представить в виде такого шаблона:
8. Пример объявления и использования двумерного массива native -структурПусть задана native -структура, которая описывает точку на плоскости.
Тогда, работа с двумерным массивом таких структур размером 5*10 будет приблизительно следующей